之前在Google的博客上看到说针对视觉更新避免setTimeout 或 setInterval 一律改为使用 requestAnimationFrame,那么requestAnimationFrame是什么?为什么要替换成它呢?
window.requestAnimationFrame() 方法告诉浏览器您希望执行动画并请求浏览器在下一次重绘之前调用指定的函数来更新动画。该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。
通常在浏览器中想要执行一段动画,一般设置个定时器以某一间隔重复执行动作,但这么做有几个问题
- 这个时间间隔因设备性能不同无法确认
- 回调会在某一点执行,这个点可能就是结束之时,这样可能会遗留掉某个画面从而导致闪动
- 不必要的渲染,如tab切换
使用requestAnimationFrame可以避免这个问题,让浏览器引擎来决定这个渲染时机
附录:requestAnimationFrame兼容性
requestAnimationFrame.png
网友评论