JS高级运动实例分析
程序员文章站
2023-08-19 10:51:49
本文实例分析了js高级运动。分享给大家供大家参考,具体如下:
一、链式运动框架
1.他需要一个回调函数,在运动停止时,开始下一次运动(执行函数)
多物体运动框架改...
本文实例分析了js高级运动。分享给大家供大家参考,具体如下:
一、链式运动框架
1.他需要一个回调函数,在运动停止时,开始下一次运动(执行函数)
多物体运动框架改为如下:
function startmove(obj,attr,itarget,fn){ ... if(icur==itarget){ clearinterval(obj.timer); fn(); }... };
然后就可以用它,比如先变宽再变高最后变透明度
startmove(this,'width',300,function(){ startmove(this,'height',300,function(){ startmove(this,'opacity',100); }); });
二、完美运动框架
1.原本多物体运动框架的缺陷
比如要让他宽度高度同时变300,这样写:
startmove(this,'width',300); startmove(this,'height',300);
问题:只有高度变300了(因为宽度准备运动时会开一个定时器,这个定时器还没开始运动前,执行高度变化的运动,就把之前的定时器关了)
2.for in
for(i=0;i<=arr.length;i++)和for(i in arr)效果一样
①什么时候用for什么时候用for...in呢?
数组:两个都可以用 json:只能用for...in(因为json下标没有规律,没有length可言)
对数组而言for...in循环不灵活,因为for循环可以从1可以从2等等任意数字开始,而for...in一循环就全部
②for in小应用
function setstyle(obj,attr,value){ obj.style[attr]=value; }; setstyle(odiv,'width','300px'); setstyle(odiv,'height','300px'); setstyle(odiv,'background','green');
=====>
function setstyle(obj,json){ var attr=''; for(attr in json){ obj.style[attr]=json[attr]; } }; setstyle(odiv,{width:'300px',height:'300px',background:'green'});
③多物体运动框架改进
function startmove(obj,json,fn){ clearinterval(obj.timer); obj.timer=setinterval(function(){ for(var attr in json){ if(attr=='opacity'){ var icur=parseint(parsefloat(getstyle(obj,attr))*100); } else{ var icur=parseint(getstyle(obj,attr)); } var ispeed=(json[attr]-icur)/8; ispeed=ispeed>0?math.ceil(ispeed):math.floor(ispeed); if(icur==json[attr]){ clearinterval(obj.timer); if(fn){ fn(); //有传函数这个参数才执行,不然会出错 } } else{ if(attr=='opacity'){ obj.style.filter='alpha(opacity:'+(icur+ispeed)+')'; obj.style.opacity=(icur+ispeed)/100; } else{ obj.style[attr]=icur+ispeed+'px' } } } },30); };
这样还有个问题
if(icur==json[attr]){ clearinterval(obj.timer); }
只要json里有任一值到达目标,计时器就停止
比如我让宽度变到103,高度变到300,那高度到不了300就停止了
解决方案
function startmove(obj,json,fn){ clearinterval(obj.timer); obj.timer=setinterval(function(){ var bstop=true; //先定义一个值,假设所有值都到了 for(var attr in json){ if(attr=='opacity'){ var icur=parseint(parsefloat(getstyle(obj,attr))*100); } else{ var icur=parseint(getstyle(obj,attr)); } var ispeed=(json[attr]-icur)/8; ispeed=ispeed>0?math.ceil(ispeed):math.floor(ispeed); if(icur!=json[attr]){ bstop=false; //并不是所有值都到了,就把bstop设成 false } if(attr=='opacity'){ obj.style.filter='alpha(opacity:'+(icur+ispeed)+')'; obj.style.opacity=(icur+ispeed)/100; } else{ obj.style[attr]=icur+ispeed+'px' } } if(bstop){ //所有值都到了,关闭定时器 clearinterval(obj.timer); if(fn){ fn(); //有传函数这个参数才执行,不然会出错 } } },30); };
更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript运动效果与技巧汇总》、《javascript切换特效与技巧总结》、《javascript查找算法技巧总结》、《javascript动画特效与技巧汇总》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结》
希望本文所述对大家javascript程序设计有所帮助。