window.requestAnimationFrame()是个啥?
window.requestAnimationFrame()方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画。该方法将在重绘之前调用的回调作为参数。
看出来了吧,就是为我们提供了一个执行动画的方法!
那我们为什么要用做个执行动画呢?
首先我们要说下显示器,因为一般显示器大约是16.7ms的刷新频率,也就是大概1s钟60次;
那么 requestAnimationFrame方法通过在系统准备好绘制动画帧时调用该帧,从而为创建动画网页提供了一种更平滑更高效的方法;
也就是说requestAnimationFrame方法的频率与显示器刷新频率大概相同;
在此 API 之前,使用 setTimeout 和 setInterval 绘制的动画并没有为 Web 开发人员提供有效的方法来规划动画的图形计时器。这导致了动画过度绘制,浪费 CPU 周期以及消耗额外的电能等问题。而且,即使看不到网站,特别是当网站使用背景选项卡中的页面或浏览器已最小化时,动画都会频繁出现。而requestAnimationFrame方法在不在当前选项卡或者浏览器最小化时会停止动画,从而可以更好地节约系统资源。
使用方法(语法)
|
|
参数callback
在每次需要重新绘制动画时,会调用这个参数所指定的函数。这个回调函数会收到一个参数,这个 DOMHighResTimeStamp 类型的参数指示当前时间距离开始触发 requestAnimationFrame 的回调的时间
也就是说callback函数在在执行时可以自动获得一个参数timestamp
timestamp表示当前时间距离开始触发 requestAnimationFrame 的回调的时间
返回值
requestID 是一个长整型非零值,作为一个唯一的标识符.你可以将该值作为参数传给
window.cancelAnimationFrame() 来取消这个回调函数。
兼容性
目前移动端的是不兼容的,而PC上也得做兼容处理;
代码请看这里:
这里的处理是如果支持就使用window.requestAnimationFrame()方法,如果不支持则退为使用window.setTimeout()方法