js运动基础之缓冲运动

单属性缓冲运动
 1     /**
 2      * 单属性缓冲运动
 3      */
 4     function fnSingleBufferMove(oDom, sAttr, iTarget, fn){
 5         var iSpeed, iCur;
 6         clearInterval(oDom.timer);
 7         oDom.timer = setInterval(function(){
 8             // 计算当前值
 9             if(sAttr == 'opacity'){
10                 iCur = Math.round(fnGetStyle(oDom, sAttr) * 100);
11             }else{
12                 iCur = parseInt(fnGetStyle(oDom, sAttr));
13             }
14 
15             // 计算速度
16             iSpeed = (iTarget - iCur) / 8;
17             iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); // 速度取整(浏览器会对样式的小数部分进行四舍五入,导致不能达到终点)
18 
19             // 运动停止
20             if(iCur == iTarget){
21                 clearInterval(oDom.timer);
22                 fn && fn();
23             }else{
24                 if(sAttr == 'opacity'){
25                     oDom.style.opacity = (iCur + iSpeed) / 100;
26                     oDom.style.filter = 'alpha(opacity: ' + (iCur + iSpeed) + ')';
27                 }else{
28                     oDom.style[sAttr] = iCur + iSpeed + 'px';
29                 }
30             }
31         }, 30);
32     }

 

多属性缓冲运动
 1     /**
 2      * 多属性缓冲运动
 3      */
 4     function fnMultiBufferMove(oDom, json, fn){
 5         var iSpeed, iCur, bStop;
 6         clearInterval(oDom.timer);
 7         oDom.timer = setInterval(function(){
 8             bStop = true;
 9             for(var sAttr in json){
10                 // 计算当前值
11                 if(sAttr == 'opacity'){
12                     iCur = Math.round(fnGetStyle(oDom, sAttr) * 100);
13                 }else{
14                     iCur = parseInt(fnGetStyle(oDom, sAttr));
15                 }
16 
17                 // 计算速度
18                 iSpeed = (json[sAttr] - iCur) / 8;
19                 iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); // 速度取整(浏览器会对样式的小数部分进行四舍五入,导致不能达到终点)
20 
21                 // 运动
22                 if(iCur != json[sAttr]){
23                     bStop = false;
24                     if(sAttr == 'opacity'){
25                         oDom.style.opacity = (iCur + iSpeed) / 100;
26                         oDom.style.filter = 'alpha(opacity: ' + (iCur + iSpeed) + ')';
27                     }else{
28                         oDom.style[sAttr] = iCur + iSpeed + 'px';
29                     }
30                 }
31             }
32 
33             // 运动停止
34             if(bStop){
35                 clearInterval(oDom.timer);
36                 fn && fn();
37             }
38         }, 30);
39     }

 

转载于:https://www.cnblogs.com/tyxloveyfq/p/4300674.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值