requestAnimationFrame, setTimeout、 setInterval 时间相关函数

122 阅读1分钟

setTimeout()、setInterval()和requestAnimationFrame(),这三个与定时有关的方法都属于浏览器的window对象的方法,

1. setTimeout() 超时执行时

2. setInterval() 周期执行

3. requestAnimationFrame(fun) 根据浏览器屏幕刷新频率执行回调函数

回调函数执行次数通常是每秒 60 次,但在大多数遵循 W3C 建议的浏览器中,回调函数执行次数通常与浏览器屏幕刷新次数相匹配。该回调函数会传入 DOMHighResTimeStamp 参数,它表示requestAnimationFrame() 开始执行回调函数的时刻。可使用 cancelAnimationFrame() 来取消requestAnimationFrame()对某个函数的引用。

4. 差异

setTimeout() 定时完成之后就会被释放;

setInterval() 会一直周期执行,需要进行手动释放;

requestAnimationFrame() 函数的定时根据浏览器的屏幕刷新频率来定,而且当 **当 requestAnimationFrame() 运行在后台标签页或者隐藏的 里时,requestAnimationFrame() 会被暂停调用以提升性能和电池寿命。

5. 共性

都可以理解为定时函数,但是是由于 JavaScript 其实是运行在单线程环境中的,这就意味着定时器仅仅是计划代码在未来的某个时间执行,而具体执行时机是不能保证的,需要根据占用浏览器资源的事件来决定定时是否被推迟。

参考:www.yanhuangxueyuan.com/HTML5/time.…