Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我多次调用requestAnimationFrame时会发生什么_Javascript_Requestanimationframe - Fatal编程技术网

Javascript 当我多次调用requestAnimationFrame时会发生什么

Javascript 当我多次调用requestAnimationFrame时会发生什么,javascript,requestanimationframe,Javascript,Requestanimationframe,我的意思是一次使用相同的函数调用多个requestAnimationFrame function Draw() { /* DoSomething */ } function AFunc() { /* prepare something */ requestAnimationFrame(Draw); } function BFunc() { /* prepare something */ requestAnimationFrame(Draw); } window.

我的意思是一次使用相同的函数调用多个requestAnimationFrame

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

window.onload(function(){
   AFunc();
   BFunc();
});
会发生什么?它会复制吗?它会在同一帧中被调用两次吗?或者它将被堆叠并在差异帧上调用?

来自:

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

(强调矿山)

还有:

调用requestAnimationFrame()方法时,用户代理必须运行以下步骤:

  • 将方法的参数附加到文档的动画帧回调列表中
  • 当用户代理现在要为带有时间戳的文档文档运行动画帧回调时,它必须运行以下步骤:

  • 对于回调中的每个条目,顺序为:调用回调
  • 关于你的问题:

    会发生什么?它会复制吗?它会在同一帧中被调用两次吗?或者它将被堆叠并在不同的框架上调用


    综上所述,连续调用将被添加到回调列表中,这些调用将按照浏览器运行它们时添加的顺序依次执行,基本上重复了代码中对
    Draw
    的调用。

    非常感谢much@Thaina,在你的例子中,这两个请求都将在同一帧中执行,尽管请求的功能相同。如果您的示例不同,以至于一个请求被充分延迟,那么它将在下一帧被调用。没有什么可以阻止您请求在同一帧中执行同一函数两次或两次以上,即复制。