JavaScript动画原理之如何使用js进行动画效果的实现

 更新时间:2023年04月06日 10:32:31   作者:Aic山鱼  
在现在做页面很多时候都会用上动画效果,比如下拉菜单,侧边搜索栏,层的弹出与关闭等等,下面这篇文章主要给大家介绍了关于JavaScript动画原理之如何使用js进行动画效果实现的相关资料,需要的朋友可以参考下

前言

动画对于我们来说都不陌生,css里面就有很多动画,2d,3d等各种动画,本篇主要是如何使用js实现动画效果,如果本篇文章对你有帮助,点赞支持一下吧!

1.动画原理

        1.获得盒子当前位置

        2.让盒子在当前位置加上1个移动距离

        3.利用定时器不断重复这个操作

        4.加一个结束定时器的条件        

        5.注意该元素需要添加定位,才能使用element.style.left

<body>
    <div>
 
    </div>
    <script>
 
        var div = document.querySelector('div');
        var timer = setInterval(function () {
            if (div.offsetLeft >= 500) {
                clearInterval(timer);
            }
            div.style.left = div.offsetLeft + 2 + 'px';
        }, 30)
    </script>
</body>

主要核心就是利用定时器进行动画的实现

2.动画函数的封装

<script>
        // 简单动画函数封装
        function animate(obj, rug) {
            var timer = setInterval(function () {
                if (obj.offsetLeft >= rug) {
                    clearInterval(timer);
                }
                obj.style.left = obj.offsetLeft + 2 + 'px';
            }, 30)
        }
        var div = document.querySelector('div');
    animate(div,300);
    </script>

把这个动画封装成一个函数,方便以后的使用,该封装函数里的obj是哪个元素要进行动画的实现rug是该元素要移动多少距离

3.给不同元素添加定时器

<body>
    <div>
 
    </div>
    <button>点击走</button>
    <script>
        // 简单动画函数封装
        // 给不同元素添加定时器
        function animate(obj, rug) {
            clearInterval(obj.timer);
            obj.timer = setInterval(function () {
                if (obj.offsetLeft >= rug) {
                    clearInterval(obj.timer);
                } else {
                    obj.style.left = obj.offsetLeft + 2 + 'px';
                }
            }, 30)
        }
        var div = document.querySelector('div');
        var but = document.querySelector('button');
        but.addEventListener('click', function () {
            animate(div, 200);
        })
    </script>

这样就能实现多个元素进行动画的使用了,并且每个元素都有属于自己的定时器

4.缓动动画原理

公式:目标值-现在的位置/10 ,作为每次的移动距离

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            position: absolute;
            left: 0;
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <button>点击</button>
    <div></div>
    <script>
        function animate(obj, rug) {
            clearInterval(obj.timer);
            obj.timer = setInterval(function () {
                // 步长值
                var step = (rug - obj.offsetLeft) / 10;
                if (obj.offsetLeft == rug) {
                    clearInterval(obj.timer);
                } else {
                    obj.style.left = obj.offsetLeft + step + 'px';
                }
            }, 15)
        }
        var div = document.querySelector('div');
        var but = document.querySelector('button');
        but.addEventListener('click', function () {
            animate(div, 500);
        })
    </script>
</body>
 
</html>

5.给动画添加回调函数

回调函数原理:函数可以作为一个参数。将这个函数作为参数传到另一个函数里面 ,当那个函数执行完之后,再执行传进去的这个函数,这个过程就叫做回调。

当跑完800米后,会弹出一个框“hello”,这个就是在执行完800米这个动画后再次进行的函数,这就是回调函数

6.动画函数的使用

实现侧边栏滑动效果

当鼠标经过slider就会让con这 个盒子滑动到左侧

当鼠标离开slider就会让con这 个盒子滑动到右侧

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/animate.js"></script>
    <style>
        .silder {
            margin-left: 1600px;
            text-align: center;
            position: relative;
            line-height: 100px;
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
        span {}
 
        .con {
            position: absolute;
            top: 0;
            left: 0;
            z-index: -1;
            width: 200px;
            height: 100px;
            background-color: rgb(132, 0, 255);
        }
    </style>
</head>
<body>
    <div class="silder">
        <span>←</span>
        <div class="con">问题反馈</div>
    </div>
    <script>
        var silder = document.querySelector('.silder');
        var con = document.querySelector('.con');
        var span = document.querySelector('span');
        silder.addEventListener('mouseenter', function () {
            animate(con, -200, function () {
                span.innerHTML = '→';
            });
        })
        silder.addEventListener('mouseleave', function () {
            animate(con, 0, function () {
                span.innerHTML = '←';
            });
        })
    </script>
</body>
 
</html>

写在最后

到此这篇关于JavaScript动画原理之如何使用js进行动画效果的实现的文章就介绍到这了,更多相关js实现动画效果内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS实现简单的九宫格抽奖

    JS实现简单的九宫格抽奖

    这篇文章主要为大家详细介绍了JS实现简单的九宫格抽奖,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • JavaScript相等运算符的九条规则示例详解

    JavaScript相等运算符的九条规则示例详解

    这篇文章主要给大家介绍了关于JavaScript相等运算符的九条规则,文中通过示例代码介绍的非常详细,对大家的学习或者使用JavaScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 小程序开发之模态框组件封装

    小程序开发之模态框组件封装

    这篇文章主要为大家详细介绍了小程序开发之模态框组件封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • javascript数组去重3种方法的性能测试与比较

    javascript数组去重3种方法的性能测试与比较

    面试题中有一题数组去重,首先想到的是对象存键值的方法可是遇到不同类型又能转换成同样的字符串的就完了接下来为大家介绍下双重循环/存键值和类型实现去重,感兴趣的各位可以参考下哈
    2013-03-03
  • JavaScript中this机制是如何真正工作的

    JavaScript中this机制是如何真正工作的

    JavaScript中this机制提供了更优雅的方式来隐含地“传递”一个对象引用,导致更加干净的API设计和更容易的复用,this既不是函数自身的引用,也不是函数词法作用域的引用,this实际上是在函数被调用时建立的一个绑定,它指向什么是完全由函数被调用的调用点来决定的
    2023-11-11
  • AngularJs 禁止模板缓存的方法

    AngularJs 禁止模板缓存的方法

    本篇文章主要介绍了AngularJs 禁止模板缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • javascript使用location.search的示例

    javascript使用location.search的示例

    本文介绍javascript 使用location.search获取当前地址栏参数的实例
    2013-11-11
  • JavaScript缺少insertAfter解决方案

    JavaScript缺少insertAfter解决方案

    这篇文章主要介绍了JavaScript缺少insertAfter解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • javascript实现弹幕墙效果

    javascript实现弹幕墙效果

    这篇文章主要为大家详细介绍了javascript实现弹幕墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 前端进阶JS数组高级用法大全教程示例

    前端进阶JS数组高级用法大全教程示例

    这篇文章主要为大家介绍了前端进阶JS数组高级用法教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论