我正挣扎着去抚摸requestanimationframe。
正确的说法是,requestanimationframe是一种浏览器API,它使影响绘制的用户界面的逻辑能够在图形子系统的接口下一次闪动之前运行,从而避免由于物理屏幕刷新周期和应用程序呈现循环之间的相位差异而浪费绘制帧的精力吗?
发布于 2015-04-03 11:27:27
requestAnimationFrame只是一个方法,它:
requestAnimationFrame方法用于向用户代理发出信号,表示需要重放基于脚本的动画。
当调用该方法时:
当调用requestAnimationFrame(回调)时,用户代理必须通过在动画帧请求回调列表的末尾附加一个句柄大于0的条目来调度基于脚本的动画重定向。该条目唯一地标识列表中的条目,回调是回调。
下一步是在cancelAnimationFrame之前遍历回调列表(除非为列表中的一个或多个is调用了一个浏览器发出重绘 )。
Window.requestAnimationFrame()方法告诉浏览器您希望执行动画,并请求浏览器在下一次重新绘制之前调用指定的函数来更新动画。
rAF将同步每个回调,以便每个重绘符合监视器的更新速率(或者更确切地说是显示卡的更新速率)。这基本上意味着在VBLANK发生之后就会发出一个新的回调,这样脚本就有大约16.7ms的时间在下一个VBLANK触发器之前完成它的呈现。
setTimeout/setInterval无法与监视器更新同步,因为它们只能取整数值。通常的更新速率要求每帧16.67ms @ 60 Hz,因此您将不时使用这些方法中的一种,因为您需要使用16或17 as的更新速率。
rAF不受此限制。由于rAF处理的是框架更新列表,而不是公共事件列表,因此浏览器可以更有效地清除队列。浏览器还可以降低到f.ex的速率。如果浏览器选项卡不可见,则将回调减少到一半,从而减少负载。
不需要使用图形子系统来"blit"/repaint,但通常是这样的。
https://stackoverflow.com/questions/29430789
复制相似问题