TOGOUTECH

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

coder 2024-05-16 原文

我的意思是一次性调用多个具有相同功能的requestAnimationFrame

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

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

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

最佳答案

来自 the MDN documentation :

The callback method is passed a single argument, a DOMHighResTimeStamp, which indicates the current time when callbacks queued by requestAnimationFrame begin to fire. Multiple callbacks in a single frame, therefore, each receive the same timestamp even though time has passed during the computation of every previous callback's workload. This timestamp is a decimal number, in milliseconds, but with a minimal precision of 1ms (1000 µs).

(强调我的)

此外,from the spec :

When the requestAnimationFrame() method is called, the user agent must run the following steps:

...

  1. Append the method's argument to document's list of animation frame callbacks

When the user agent is to run the animation frame callbacks for a Document doc with a timestamp now, it must run the following steps:

...

  1. For each entry in callbacks, in order: invoke the callback

所以对于你的问题:

What will happen? Will it duplicated? Would it be called 2 times in the same frame? Or it would be stacked and called on difference frame?

上面的所有内容表明,连续的调用将被添加到回调列表中,当浏览器将要运行它们时,这些调用将按照添加的顺序一个接一个地执行,本质上是重复调用Draw 在您的代码中。

关于javascript - 当我多次调用 requestAnimationFrame 时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37673711/

有关javascript - 当我多次调用 requestAnimationFrame 时会发生什么的更多相关文章

  1. javascript - 为什么 JSON.Parse 说 "invalid character"? - 2

    我有一段在IE中运行的JS,其中包含以下行:vardata=JSON.parse("{skill:'SK_AUTO_DEV_TEST',kind:'IS_REQUIRED'}");谁能告诉我这是怎么回事? 最佳答案 因为这不是有效的JSON–您需要在属性名称周围加上引号。JSON.parse('{"skill":"SK_AUTO_DEV_TEST","kind":"IS_REQUIRED"}'); 关于jav

  2. javascript - 文件下载不适用于 firefox - 2

    我编写的这段代码在GoogleChrome和Opera上运行完美,但在Firefox上运行不佳functiononSaveJPG(url,n){varsave=document.createElement('a');save.href=url;save.target='_blank';save.download='Imageno'+n+'.jpeg'||url;varevent=document.createEvent('Event');event.initEvent('click',tru

  3. javascript - 带有 Javascript 的 Excel 宏 - 2

    我希望使用Javascript中的宏而不是默认的VBA来操作excel电子表格。我可以使用以下VBA代码执行javascript代码'javascripttoexecuteDimbAsStringb="functionmeaningOfLife(a,b){return42;}"'VBAtooltorunitDimoAsNewScriptControlo.Language="JScript"o.AddCodebMsgBoxo.Run("meaningOfLife",0,1)这使我能够执行任意javascript,但是我无法从

  4. javascript - 在 Angular 中动态创建元素 - 2

    我的javascript经验很少。我需要在单击某个项目时添加一个菜单。我们被要求从头开始构建它,而不使用任何库,如bootstrap组件或JQuery。我们正在使用Angularjs。在Angular上,我想知道创建新元素的正确方法。类似于我们没有的document.createElement。我正在添加一些代码,以便你们更好地了解我想要做什么。菜单指令.directive('menu',["$location","menuData",functionfactory(location,menuData){return{templateUr

  5. Javascript - 使用字符串连接设置变量 - 2

    这个问题在这里已经有了答案:UsedynamicvariablenamesinJavaScript(19个回答)关闭9年前。是否可以通过将两个字符串连接在一起形成名称来设置变量?如果可能的话,我想根据用户单击的对象的类名来确定要设置的变量。我知道我可以对一堆if/elseif语句进行硬编码,但如果我可以间接引用变量,那就太棒了。我在想这样的事情:varowner_read;vargroup_read;functionsetVariableIndirectly(object){varsecond=object.className;//returns"read"varfir

  6. javascript - 如何将 jquery 事件重新绑定(bind)到通过 ajax 加载的内容,而无需为每个事件/类执行此操作 - 2

    所以我在其中绑定(bind)了这个jquery-App:我所有“.btn-delete”元素的“删除功能”我所有“.btn-add”元素的“添加功能”等等。在我的webapp的一个div中,我异步加载内容,包括我想将“删除”和“添加”功能绑定(bind)到的元素。这些元素也有一个“btn-delete”或“btn-add”类-但由于内容是异步加载的,因此事件不会绑定(bind)到它们而不做任何事情。所以我听说使用可以在异步加载内容后立即触发的.on('click'...)函数,我可以重新绑定(bind)这些函数。但是我必须为我想使用的每个功能都这样做。我不想要。我想要的是有一个通用函数

  7. javascript - 添加文件 ://. 权限到 chrome 扩展 - 2

    如何使用chrome扩展程序启用file:///的权限。在我的manifest.json中,我尝试过:"permissions":["file:///*"]和"permissions":["file://*"]还有"permissions":["*:///C"]这些都不起作用。 最佳答案 "permissions":["file://*/*"]除非从您的本地磁盘加载扩展,否则默认情况下将禁用文件访问。用户必

  8. javascript - 根据屏幕尺寸执行功能 - 2

    我需要根据屏幕尺寸和屏幕尺寸变化执行特定功能(响应式)假设我有3个函数(例如)functionred(){$('div').css('background','#B60C0C').text('ScreenSizeRED');console.log('RED');}functionorange(){$('div').css('background','#EBAE10').text('ScreenSizeORANGE');console.log(&

  9. 多个元素上的 JavaScript onChange() - 2

    是否可以将相同的onChange()分配给多个元素(无jQuery)目前我在做varnamefirst=document.getElementsByName("attribute.IdentifierSource")[0];namefirst.onchange=function(){//disablesomestuff}但是,我必须对另外5个元素执行此onChange(),所以我想知道是否可以同时对所有元素执行此操作?或者我是否必须为每个元素执行此操作。(我对Javascript很陌生) 最佳答案 如果你想一次绑定(

  10. javascript - 在 AngularJS 中加载时隐藏模板 - 2

    从服务器加载数据时隐藏模板的更好解决方案是什么?我的解决方案是使用$scope使用bool变量isLoading并使用指令ng-hide,例如:<divng-hide='isLoading'></div>angular还有别的办法吗? 最佳答案 您可以尝试使用ngCloak指令。检查此链接http://docs.angularjs.org/api/ng.directive:ngCloak 关于javascript-在AngularJS中加载时隐藏模

随机推荐

  1. javascript - 为什么 JSON.Parse 说 "invalid character"? - 2

    我有一段在IE中运行的JS,其中包含以下行:vardata=JSON.parse("{skill:'SK_AUTO_DEV_TEST',kind:'IS_REQUIRED'}");谁能告诉我这是怎么回事? 最佳答案 因为这不是有效的JSON–您需要在属性名称周围加上引号。JSON.parse('{"skill":"SK_AUTO_DEV_TEST","kind":"IS_REQUIRED"}'); 关于jav

  2. javascript - 文件下载不适用于 firefox - 2

    我编写的这段代码在GoogleChrome和Opera上运行完美,但在Firefox上运行不佳functiononSaveJPG(url,n){varsave=document.createElement('a');save.href=url;save.target='_blank';save.download='Imageno'+n+'.jpeg'||url;varevent=document.createEvent('Event');event.initEvent('click',tru

  3. javascript - 带有 Javascript 的 Excel 宏 - 2

    我希望使用Javascript中的宏而不是默认的VBA来操作excel电子表格。我可以使用以下VBA代码执行javascript代码'javascripttoexecuteDimbAsStringb="functionmeaningOfLife(a,b){return42;}"'VBAtooltorunitDimoAsNewScriptControlo.Language="JScript"o.AddCodebMsgBoxo.Run("meaningOfLife",0,1)这使我能够执行任意javascript,但是我无法从

  4. javascript - 在 Angular 中动态创建元素 - 2

    我的javascript经验很少。我需要在单击某个项目时添加一个菜单。我们被要求从头开始构建它,而不使用任何库,如bootstrap组件或JQuery。我们正在使用Angularjs。在Angular上,我想知道创建新元素的正确方法。类似于我们没有的document.createElement。我正在添加一些代码,以便你们更好地了解我想要做什么。菜单指令.directive('menu',["$location","menuData",functionfactory(location,menuData){return{templateUr

  5. Javascript - 使用字符串连接设置变量 - 2

    这个问题在这里已经有了答案:UsedynamicvariablenamesinJavaScript(19个回答)关闭9年前。是否可以通过将两个字符串连接在一起形成名称来设置变量?如果可能的话,我想根据用户单击的对象的类名来确定要设置的变量。我知道我可以对一堆if/elseif语句进行硬编码,但如果我可以间接引用变量,那就太棒了。我在想这样的事情:varowner_read;vargroup_read;functionsetVariableIndirectly(object){varsecond=object.className;//returns"read"varfir

  6. javascript - 如何将 jquery 事件重新绑定(bind)到通过 ajax 加载的内容,而无需为每个事件/类执行此操作 - 2

    所以我在其中绑定(bind)了这个jquery-App:我所有“.btn-delete”元素的“删除功能”我所有“.btn-add”元素的“添加功能”等等。在我的webapp的一个div中,我异步加载内容,包括我想将“删除”和“添加”功能绑定(bind)到的元素。这些元素也有一个“btn-delete”或“btn-add”类-但由于内容是异步加载的,因此事件不会绑定(bind)到它们而不做任何事情。所以我听说使用可以在异步加载内容后立即触发的.on('click'...)函数,我可以重新绑定(bind)这些函数。但是我必须为我想使用的每个功能都这样做。我不想要。我想要的是有一个通用函数

  7. javascript - 添加文件 ://. 权限到 chrome 扩展 - 2

    如何使用chrome扩展程序启用file:///的权限。在我的manifest.json中,我尝试过:"permissions":["file:///*"]和"permissions":["file://*"]还有"permissions":["*:///C"]这些都不起作用。 最佳答案 "permissions":["file://*/*"]除非从您的本地磁盘加载扩展,否则默认情况下将禁用文件访问。用户必

  8. javascript - 根据屏幕尺寸执行功能 - 2

    我需要根据屏幕尺寸和屏幕尺寸变化执行特定功能(响应式)假设我有3个函数(例如)functionred(){$('div').css('background','#B60C0C').text('ScreenSizeRED');console.log('RED');}functionorange(){$('div').css('background','#EBAE10').text('ScreenSizeORANGE');console.log(&

  9. 多个元素上的 JavaScript onChange() - 2

    是否可以将相同的onChange()分配给多个元素(无jQuery)目前我在做varnamefirst=document.getElementsByName("attribute.IdentifierSource")[0];namefirst.onchange=function(){//disablesomestuff}但是,我必须对另外5个元素执行此onChange(),所以我想知道是否可以同时对所有元素执行此操作?或者我是否必须为每个元素执行此操作。(我对Javascript很陌生) 最佳答案 如果你想一次绑定(

  10. javascript - 在 AngularJS 中加载时隐藏模板 - 2

    从服务器加载数据时隐藏模板的更好解决方案是什么?我的解决方案是使用$scope使用bool变量isLoading并使用指令ng-hide,例如:<divng-hide='isLoading'></div>angular还有别的办法吗? 最佳答案 您可以尝试使用ngCloak指令。检查此链接http://docs.angularjs.org/api/ng.directive:ngCloak 关于javascript-在AngularJS中加载时隐藏模