JS运动缓冲的封装函数

之前经常写运动函数,要写好多好多,后来想办法封装起来。(运动缓冲)。

 1 /*
 2     物体多属性同时运动的函数
 3     obj:运动的物体
 4     oTarget:对象,属性名为运动的样式名,属性值为样式运动的终点值
 5     ratio:速度的系数
 6 */
 7 function bufferMove(obj, oTarget, fn,ratio = 8) {
 8     clearInterval(obj.iTimer);
 9     obj.iTimer = setInterval(function () {
10         // 此处设定开关bBtn,假设所有的属性均已运动完毕true
11         var bBtn = true;
12         for(var sAttr in oTarget){
13             // 获取当前值,此处兼容透明度的变化
14             if(sAttr === 'opacity') {
15                 var iCur = parseFloat(getStyle(obj, sAttr) * 100);
16             } else {
17                 var iCur = parseInt(getStyle(obj, sAttr));
18             }
19             // 计算速度,此处可判定方向,如向左或向右,先透明后出现或先出现后透明等
20             var iSpeed = (oTarget[sAttr] - iCur) / ratio;
21             iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
22 
23             // 计算下一次的值
24             var iNext = iCur + iSpeed;
25 
26             // 赋值给对应样式
27             if(sAttr ==='opacity') {
28                 obj.style.opacity = iNext / 100;
29                 obj.style.filter = 'alpha(opacity=' + iNext +')';
30             } else {
31                 obj.style[sAttr] = iNext + 'px';
32             }
33 
34             // 清除定时器,当前的位置和终点值是否相等,相等则说明结束
35             if(iNext !== oTarget[sAttr]) {
36                 bBtn = false;
37             }
38         }
39         // 如果bBtn的值为true,则说明所有的属性均已运动完毕,回调函数fn()
40         if(bBtn) {
41             clearInterval(obj.iTimer);
42             if(fn){
43                 fn();
44             }
45         }
46     }, 50);
47 }

以上封装函数也可以用于单个属性,多样式运动,比如:

bufferMove(obj,{"left":200,"width":400,"opacity":80},fn,8);

就这样。

转载于:https://www.cnblogs.com/lucio110/p/7345286.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值