JS封装缓动动画效果函数

原理

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);
        });

看效果
在这里插入图片描述
如果你想在运动之后再做其他效果,那就需要给动画添加回调函数了

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

于是我就想当我的盒子运动完之后就要使盒子变色,然后我就这样做
我把回调函数当参数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";
            });
        })

这样就成功了,盒子运动完之后就会变成红色.
在这里插入图片描述
就这样,就完成了动画函数封装完成了,
以后需要用到动画函数,就直接调用的行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值