setInterval(foo, time)是用来做动画的常用函数之一,称为间歇定时器,由window调用,这点很重要。函数传入两个参数:
第一个是回调函数,里面写要重复执行的代码段,因为定时器是由window调用的,所以在回调函数里的this表示的是全局对象!这点在一些事件处理函数中再嵌套定时器时可能会被坑到,比如:
btn.onclick = function () {
var that = this;
setInterval (function() {
this.attr = value;//这里的this指的是window,而不是btn对象,这么写无法达到预期效果
that.attr = value;//正确
}, 20);
}
第二个参数是时间(单位ms),表示每隔多久执行一次上述回调函数。
以下再记录下使用该函数时一些其他重要的注意点:
第一,务必在回调函数中开头清除定时器,即clearInterval(timer),其中timer为该定时器的ID,为定时器的返回值,即timer = setInterval(...);
防止定时器在你不知道的情况下被重复调用,叠加效果从而导致动画出现问题,因此每次调用回调函数前都得清除一下。
第二,使用对象属性来获取定时器ID值,如obj.timer,而不是简单的变量,防止清除某一定时器时误删别的定时器(尤其封装的动画函数中有定时器,函数中有传入要移动的对 象)。
第三,若给物体添加动画没有效果,检查看看是不是给物体DOM对象的style.left或是style.top赋值时最后没有加上“px”,这与CSS写法相同,且为字符串,务必记得加上,这个在浏览器上不会报错,不加注意很容易找不到错,所以务必牢记在心。还有个要检查的就是有没有给物体CSS样式中添加定位position: absolute,不加显然那些left,top属性就没有意义,这个初学也很容易忘记,之后记住即可。