js定时器

久未见 提交于 2020-02-01 11:45:29

定时器分两种分别是setTimeout和setInterval。

两者的用法分别是setTimeout(funhander,time);setInterval(fnhander,time);设置的相应计时器需要用clearTimeout(对象)和clearInterval(对象)清掉。有以下几点需要注意:

第一:setTimeout(funhander,time)的作用是在过time毫秒后,执行一次句柄funhander指向的方法。而setInterval(funhander,time)的作用是,每隔time毫秒后,就执行一次句柄funhander指向的方法。一直到我清掉计时器停止。

第二:巨大多数的计时器使用都是为了执行渐变、渐隐渐现、位置渐变等效果,所以funhander指向的方法会被多次执行。因此如果我们使用setTimeout做定时器,一般要把计时器的设置写在funhander指向的方法里,这样就可以循环调用,多次执行funhander,一直到我清掉这个定时器。而在使用setInterval设置定时器的时候,一般要放在funhander指向行数的外面。

第三:funhander指向的方法里处理了渐变中的一步,又会被重复执行,所以在此方法中大多包含有判断语句IF。用来控制渐变到一定程度的时候进行相应处理。比如清掉定时器或者进行循环操作。

第四:funhander为句柄,此处还可以为代码段,假设重复调用的函数为function test() {alert("1");}则,我们可以写为 var timer = setTimeout(test,1000)或者 var timer = setTimeout("test()",1000)或者 var timer = setTimeout("alert("1")",1000)。但是下面的写法是错误的。var timer = setTimeout(test(),1000)。

第五:因为funhander部分是句柄,所以不能传递参数,但是有些函数是必须要传递参数的,这时候我们一般用代码段。如果碰到又需要用句柄,又不能用代码段的特殊情况,我们一般用比较特殊的方法处理。如 var timer =setTimeout(test(name),1000)。这时候这个test(name)看起来是不对的,实际上如果他的返回值是一个没有传参的方法,利用子函数可以调用父函数变量的特点,把参数传递到返回函数(子函数)内部。那上面的写法一样是可以的。

第六:在设定时器的时候一定要有返回值timer(当然你可以起自己想要的名字)。清掉定时器的时候需要使用,也是一个好的习惯。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!