已采纳回答 / lawrence_lai
使用setInterval 会返回一个数值来标记这个setInterval而且不是人为规定的数值,用timer来标记这个数值。用clearInterval来清除这个setInterval 不然setInterval会不断以一个间隔来重复触发里面的function,例如不断赋给一个变量一个相同的值。消耗内存。最简单的方面不清除定时器的叠加会让setInterval不断叠加,比如speed是每秒钟1PX移动,你重复触发5次就变成了每秒钟5PX移动,而且无法停止。至于函数为什么没有参数,你可以在回去复习一下JS...
2016-03-10
已采纳回答 / 呆4
经过我的测试,可以这样理解,在执行第一个startmove中定时器里面的函数的时候是在设定的30ms后才会执行第一次定时器里面的函数,但之后的程序仍然会继续执行,所以这时就会继续执行下一个startmove函数,而下一个startmove的第一步就是clearinterval,所以你会发现,第一个startmove的定时器中的函数其实根本就没有执行,宽度根本一次都没变,第一个startmove中的定时器在还没有等到30ms开始执行的时候就已经被clearinterval了,所以你会感觉是第一个没执行完就开...
2016-03-01
已采纳回答 / kaiyanghll
function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } function startMove(obj,iTarget,attr,fn){ clearInterval(obj.timer); ...
2016-02-21
已采纳回答 / wanoneQ
第八行 oar=getStyle(obj,attr)*100;中getStyle(obj,attr)需要用parseFloat()函数转换为数字,再四舍五入提高准确度。oar=Math.round( parseFloat( getStyle(obj,attr) )*100);另外你的速度有问题,建议提高精确度采用缓冲动画,防止边缘抖动。
2016-02-19