是否有必要在再次调用之前取消未完成的requestAnimationFrame?

时间:2013-03-27 19:59:04

标签: javascript performance animation browser requestanimationframe

我正在研究requestAnimationFramecancelAnimationFrame

的新兴标准
  

http://paulirish.com/2011/requestanimationframe-for-smart-animating/

以及此处提供的各种填充物:

  

https://gist.github.com/paulirish/1579671

使用这些函数的语义对我来说有点棘手。具体来说,假设您requestAnimationFrame(callback)一次。 如果你想在第一次回调被调用之前第二次cancelAnimationFrame,是否需要调用requestAnimationFrame(callback)?浏览器会重复调用回调吗?或者浏览器会自动将双重呼叫替换为单个呼叫吗?

我问因为my current animation is really laggy on Firefox,而requestAnimationFrame似乎没有太多帮助。但我可能会从多个来源过快地调用它。对此的权威答案会很棒。

1 个答案:

答案 0 :(得分:0)

根据规范:

  

请注意

     

requestAnimationFrame仅调度单个更新   基于脚本的动画。如果需要后续动画帧,   然后需要从内部再次调用requestAnimationFrame   回调。

     

另请注意,对requestAnimationFrame的多次调用具有相同的功能   回调(在调用回调并清除列表之前)将   导致多个条目在列表中具有相同的回调,   因此会导致回调被多次调用   动画框架。

http://www.w3.org/TR/animation-timing/

requestAnimationFrame的调用只会调度一次回拨。处理完回调后,如果删除了回调列表中的条目。所以你不必取消之前的电话。