2016-06-07 69 views
5

我的意思是在一个时间什么,当我打电话requestAnimationFrame多次

function Draw() { /* DoSomething */ } 
function AFunc() { 
    /* prepare something */ 
    requestAnimationFrame(Draw); 
} 
function BFunc() { 
    /* prepare something */ 
    requestAnimationFrame(Draw); 
} 

window.onload(function(){ 
    AFunc(); 
    BFunc(); 
}); 

会发生什么叫多requestAnimationFrame具有相同功能的发生呢?它会重复吗?它会在同一帧中被调用两次吗?或者它会被堆叠并被称为差异框架?

回答

11

the MDN documentation

回调方法传递一个参数,一个DOMHighResTimeStamp,其指示当前时间通过时排队requestAnimationFrame回调开始射击。 因此,即使在计算每个先前回调的工作负载期间已经过去了时间,但单个帧中的多个回调都会收到相同的时间戳。此时间戳是一个十进制数,以毫秒为单位,但最小精度为1毫秒(1000微秒)。

(重点煤矿)

此外,from the spec

当requestAnimationFrame()方法被调用,用户代理必须执行下列步骤:

...

  1. 将方法的参数附加到文档的动画帧列表cal lbacks

当用户代理是一种用于与时间戳的文档的文档现在运行的动画帧的回调,它必须执行下列步骤:

...

  • 对于回调每个条目,以便:调用回调
  • 因此,对于你的问题:

    会发生什么?它会重复吗?它会在同一帧中被调用两次吗?或者它会被堆叠并被称为差异框架?

    以上所有加在一起表明,连续通话将被添加到回调列表,将所有其他的顺序,他们在浏览器是由于运行它们,基本上是重复添加后执行一个在代码中调用Draw

    +0

    非常感谢 – Thaina

    相关问题