setinterval - 如何用 requestAnimationFrame 替换 setInterval

标签 setinterval requestanimationframe

这是我的情况,我需要加快函数运行时间,所以 setInterval 不是一个明智的选择,对吧?因为每次至少要花费 4 毫秒。

所以,我可以将 setInterval 函数更改为 requestAnimationFrame,但我不太明白 requestAnimationFrame 是如何工作的。

例如

// some code here
var interval = setInterval(doSomething, 10)
var progress = 0
function doSomething(){
    if (progress != 100){
        // do some thing here
    }else{
        clearInterval(interval)
    }
}

以及如何应用 requestAnimationFrame?

最佳答案

我认为理解requestAnimationFrame的关键在于paul Irish的解释:

Any rAFs queued in a rAF will be executed in the next frame​



来自 requestAnimationFrame Scheduling For Nerds
var rafReference;
var progress = 0;

function doSomething(){
   // only run 100 times
   if (progress < 100){

       /* do what you wanna do here */

       progress++; 
       //recursively calls it self as requestAnimationFrame's callback
       rafReference = requestAnimationFrame(doSomething) // passed as reference
   }else{
       cancelAnimationFrame(rafReference)
   }
}
//starting the recursion
requestAnimationFrame(doSomething)

关于setinterval - 如何用 requestAnimationFrame 替换 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17707508/

相关文章:

javascript - 存储 requestAnimationFrame

javascript - 运行 setInterval 函数,停止 3 秒然后继续运行

javascript - jQuery 播放/暂停 jQuery 函数

javascript - 为什么它显示不同的 “clientWidth” 值只是因为我设置了 “setInterval” 函数?

javascript - requestAnimationFrame 是否杀死了 setInterval?

javascript - generateMipmap 完成了吗?

typescript - 在类中使用 requestAnimationFrame

javascript - 面向对象的 javascript 和 requestAnimationFrame

javascript - 在offline.js中绑定(bind)事件

ios - 在 Swift 中每 x 分钟做一些事情