发表于: 2020-07-25 23:44:58
0 1270
(1)背景介绍:
在做项目中难免会碰到需要实时刷新,动画依次出现等等需求,这时候就需要定时器登上我们的代码舞台了,所以今天我们就先来了解一下JS定时器的设置和清除吧。
(2)知识剖析
启用定时器
window对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInterval。其中前者可以使一段代码在指定时间后运行;而后者则可以使一段代码每过指定时间就运行一次。它们的原型如下:
window.setTimeout(code/function,delay);
window.setInterval(code/function,delay);
其中,code可以是用引号括起来的一段代码,也可以是一个函数名,到了指定的时间,系统便会自动调用该函数,当使用函数名作为调用句柄时,不能带有任何参数;而使用字符串时,则可以在其中写入要传递的参数。两个方法中的第二个参数是millisec,表示延时或者重复执行的毫秒数。
具体写法如下:
1.函数名,不带参数
setTimeout (test,1000); //1秒后执行
字符串,可以执行的代码
setTimeout ('test()',1000); //1秒后执行
2.匿名函数
setTimeout (function(){},1000); //1秒后执行
注:setInterval的用法与setTimeout一样
3.调用函数,带参数
setTimeout ('test(参数)',1000); //1秒后执行
注:如果不小心写成了setTimeout (test(参数),1000);test方法就会立即执行哦。
清除定时器
由于定时器在调用时,都会返回一个整形的数字,该数字代表定时器的序号,即第多少个定时器,所以定时器的清除要借助于这个返回的数字。
定时器清除的方法:clearTimeout(obj)和clearInterval(obj)。
要清除定时器,就必须在用定时器的时候,定义一个变量来记录定时器的返回值
(3)常见问题
使用了计时器后电脑卡爆了
(4)解决方案
用计时器的时候记得要关闭,释放内存,否则会一直执行,导致很卡
(5)代码实战
详情请看视频
(6)深度思考
定时器计时一定准确码?
不一定,受电脑性能,cpu等很多因素的影响
(7)参考文献
javascript定时器,取消定时器,及js定时器优化方法
https://blog.csdn.net/johnstrive/article/details/42216005
(8)更多讨论
1、如何暂停setTimeout()、setInterval()
clearTimeout()取消由setTimeout() 方法设置的 timeout。
clearInterval() ,这个函数只有一个作用,就是暂停setInterval()调用函数。
2、弹窗会让 Chrome/Opera/Safari 内的时钟停止吗。
在众多浏览器中,IE 和 Firefox 在显示 alert/confirm/prompt 时,内部的定时器仍旧会继续滴答,但是在 Chrome、Opera 和 Safari 中,内部的定时器会暂停/冻结。
所以,在执行以上代码时,如果在一定时间内没有关掉 alert 弹窗,那么在你关闭弹窗后,Firefox/IE 会立即显示下一个 alert 弹窗(前提是距离上一次执行超过了 2 秒),而 Chrome/Opera/Safari 这三个则需要再等待 2 秒以上的时间才会再显示(因为在 alert 弹窗期间,定时器并没有滴答)。
3、定时器时间一定准确吗?
都不能保证延时的准确性,受电脑性能,cpu等很多因素的影响;
评论