本文实例分析了射流研究…实现的多个物体运动功能。分享给大家供大家参考,具体如下:
与单个的区别:得知道哪个在动,所以运动函数需要两个参数,出了目标iTarget之外,还要物体。另外需要多个计数器,否则当一个还没运动完就移入另一个物体会发生卡壳
窗户。onload=function(){ var ADiv=document。getelementsbytagname(' div ');定义变量计时器=null风险值我;for(I=0;iaDiv.lengthi ){ aDiv[i].定时器=nullaDiv[i].onmouseover=function(){ startMove(this,300);};aDiv[i].onmouseout=function(){ startMove(this,100);};}函数startMove(obj,iTarget){ clearInterval(obj。计时器);物体。timer=setInterval(function(){ var iSpeed=(itar get-obj。offset withts)/8;iSpeed=iSpeed0?数学。最高时速:楼层(I速);//凡是要用缓冲运动,肯定缺不了取整,为了让他能到目的点(不然无法完全贴合)if(obj。offset itedth==itar get){ clearInterval(obj。计时器);} else { obj。风格。宽度=obj。offsetidth是提要“px ”;} },30);};};注:多物体运动,所有东西都不能公用
属性与运动对象绑定:速度、其他属性值(如透明度等)
偏置、偏置右侧、偏置左侧、偏置右侧都有一个臭虫,拿在中间举例,他除了宽度还包括填料和边界,比如差异宽度为100,还有一像素边框,现在让差异运动,div。风格。宽度=div。偏移距离-1 ' px ',没有边框的的情况下他会一直缩小直到消失,有边框的情况宽度:100像素,偏移宽度:102像素,偏移宽度:101像素,会使得他不断变大
解决办法:
用currentStyle div。风格。width=parsent(getStyle(div,' width'))-1 'px' getStyle是自己封装好的获取样式的函数,里面包括当前样式方法parseInt。解析字符串返回整数。
扩展(任意值变化):
用同一套运动框架使得一个物体变宽,一个变高,一一个透明度变化
窗户。onload=function(){ var ADiv=document。getelementsbytagname(' div ');定义变量计时器=nullaDiv[0].onmouseover=function(){ startMove(this,' width ',300);};aDiv[0].onmouseout=function(){ startMove(this,' width ',100);};函数getStyle(obj,attr){ if(obj。currentstyle){ return obj。current style[attr];} else { return getComputedStyle(obj,false)[attr];} };函数startMove(obj,attr,itar get){ clearInterval(obj。计时器);物体。timer=setInterval(function(){ var iCur=parsent(getStyle(obj,attr));var isPeed=(itar get-IcR)/8;iSpeed=iSpeed0?数学。最高时速:楼层(I速);//凡是要用缓冲运动,肯定缺不了取整,为了让他能到目的点(不然无法完全贴合)if(ICur==itar get){ ClearInterval(obj。计时器);} else { obj。style[attr]=ICur isPeed ' px ';} },30);};};这套运动框架还有个问题,透明度没支持
1.
var iCur=parseInt(getStyle(obj,attr));不透明取到的都是零点几,parseInt取整,所以不透明永远是0,应改为
if(attr=='不透明度){ var iCur=parseFloat(getStyle(obj,attr))* 100;//为了其他程序不用修改,这里统一乘100 } else { var ICur=ParSeint(GetStyle(obj,attr));}2.
物体。style[attr]=ICur isPeed ' px ';按现在写法就是
adiv。风格。不透明度=50px应改为
if(attr=='不透明度){ obj。风格。filter=' alpha(opa city 3360 '(ICur isPeed)')';物体。风格。不透明度=(ICur IsPeed)/100;} else { obj。style[attr]=ICur isPeed ' px ' } 3 .计算机内部,都是模拟的来存储小数,不是实际来存储,最简单的例子
alert(0.07 * 100);//输出并不是7,而是7.0000.001,不止7,很多数字(小数)都有问题
所以var iCur=parseFloat(getStyle(obj,attr))* 100;就会出问题(会闪烁),解决方法就是避免使用小数
var iCur=parseInt(parseFloat(getStyle(obj,attr))* 100);更多对JavaScript相关内容感兴趣的读者可以查看本网站的主题:《JavaScript运动效果与技巧汇总》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、0103010。
希望本文对JavaScript编程有所帮助。