原理

JS的动画效果原理其实就是添加一个定时器,每多少毫秒调用一次,就可以使盒子运动一次.
在这里我封装了一个缓动动画函数,只要有对象需要添加动画就可以调用这个动画函数,就可以实现动画效果.

// 封装缓动动画函数 传递两个参数 需要执行动画的对象和目标位置
        function animate (obj , target){
            //先把原先的定时器清除,只保留一个.
            clearInterval(obj.time);
             obj.time = setInterval( function(){
                 //步长 公式:(目标位置-现在的位置)/10 
                //  Math.ceil 是往大的取整. Math.floor s是往小的取整;
                 var step =(target - obj.offsetLeft) / 10;
                 step = step > 0 ? Math.ceil(step): Math.floor(step);
                if(obj.offsetLeft == target){
                    clearInterval(obj.time);
                }
                obj.style.left = obj.offsetLeft + step +'px';
            },15);
        }

通过这个函数,只要我调用一下,就可以实现运动效果

var box = document.querySelector('.box');
        var btn1 = document.querySelector('.btn1');
        var btn2 = document.querySelector('.btn2');
        btn1.addEventListener('click', function(){
          //调用动画函数
            animate(box,300);
        });
        btn2.addEventListener('click', function(){
            animate(box,100);
        });

看效果

javascript动画特效代码_取整


如果你想在运动之后再做其他效果,那就需要给动画添加回调函数了

回调函数的原理
函数作为一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行万之后,在执行传进去的函数,这个过程叫做回调

于是我就想当我的盒子运动完之后就要使盒子变色,然后我就这样做
我把回调函数当参数callback传入
要把这个回调函数写到定时器的后面,因为要动画效果完成之后再执行回调函数,

```javascript
  // 封装缓动动画函数 传递两个参数 需要执行动画的对象和目标位置
        function animate (obj , target, callback){
            //先把原先的定时器清除,只保留一个.
            clearInterval(obj.time);
             obj.time = setInterval( function(){
                 //步长 公式:(目标位置-现在的位置)/10 
                //  Math.ceil 是往大的取整. Math.floor s是往小的取整;
                 var step =(target - obj.offsetLeft) / 10;
                 step = step > 0 ? Math.ceil(step): Math.floor(step);
                if(obj.offsetLeft == target){
                    clearInterval(obj.time);
                    //动画结束,再执行回调函数
                    //这里的意思就是,如果有callback这个参数传进来.那就调用这个函数
                    //没有的话就不执行这个条件语句.
                    if(callback){
                        //调用函数
                        callback();
                    }
                }
                obj.style.left = obj.offsetLeft + step +'px';
            },15);
        }

然后我就写回调函数
这个回调函数就是function(){};
我需要盒子变色,那我直接再回调函数里面加
box.style.backgroundColor = “red”;语句就行.

var btn3 = document.querySelector('.btn3');
        btn3.addEventListener('click', function(){
            animate(box, 400, function (){
                box.style.backgroundColor = "red";
            });
        })

这样就成功了,盒子运动完之后就会变成红色.

javascript动画特效代码_取整_02


就这样,就完成了动画函数封装完成了,

以后需要用到动画函数,就直接调用的行.