最佳答案
requestAnimationFrame
似乎是现在动画化事物的实际方式。它在大多数情况下对我来说工作得很好,但现在我正在尝试做一些画布动画,我想知道:有没有办法确保它以特定的fps运行?我知道rAF的目的是为了始终流畅的动画,我可能会冒着让我的动画起伏不定的风险,但现在它似乎以完全不同的速度运行,非常随意,我想知道是否有一种方法来解决这个问题。
我会使用setInterval
,但我想要rAF提供的优化(特别是当标签是焦点时自动停止)。
如果有人想看我的代码,它几乎是:
animateFlash: function() {
ctx_fg.clearRect(0,0,canvasWidth,canvasHeight);
ctx_fg.fillStyle = 'rgba(177,39,116,1)';
ctx_fg.strokeStyle = 'none';
ctx_fg.beginPath();
for(var i in nodes) {
nodes[i].drawFlash();
}
ctx_fg.fill();
ctx_fg.closePath();
var instance = this;
var rafID = requestAnimationFrame(function(){
instance.animateFlash();
})
var unfinishedNodes = nodes.filter(function(elem){
return elem.timer < timerMax;
});
if(unfinishedNodes.length === 0) {
console.log("done");
cancelAnimationFrame(rafID);
instance.animate();
}
}
其中Node.drawFlash()只是一些基于计数器变量确定半径的代码,然后绘制一个圆。