JS高级运动实例分析
网络编程 2021-07-04 19:20www.168986.cn编程入门
这篇文章主要介绍了JS高级运动,结合实例形式分析了javascript运动框架原理、实现与应用技巧,需要的朋友可以参考下
本文实例分析了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 bS=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]){ bS=false; //并不是所有值都到了,就把bS设成 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(bS){ //所有值都到了,关闭定时器 clearInterval(obj.timer); if(fn){ fn(); //有传函数这个参数才执行,不然会出错 } } },30); };
更多关于JavaScript相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
上一篇:js多个物体运动功能实例分析
下一篇:CSS+jQuery实现简单的折叠菜单
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程