我有一个javascript动画代码 -
function animate(position)
{
....
....
if(position++ < xyz){
animate(position); // ****this is the line that I replace with in the next attempt.
}
}
执行大约需要1秒钟。但是如果我将暂停功能设置为0时间,则需要大约15秒才能完成。
setTimeout(function(){
animate(position);
}, 0);
为什么会出现这种巨大的时差?在代码中我试图在HTML5画布上绘制一些像素。我已经省略了这些代码,使我的问题更加清晰。
答案 0 :(得分:3)
这样做的原因在于JavaScript内部处理计时器的方式。由于JavaScript是单线程的,因此没有任何内容可以同时运行。将0毫秒传递给setTimeout
只会强制该函数在第一个可用时刻运行。 John Resig在http://ejohn.org/blog/how-javascript-timers-work/处就此发表了一篇很好的文章。
您可以通过运行以下命令来查看:
setTimeout(function() {
console.log('one');
}, 0);
console.log('two');
在two
之前记录了 one
。
我假设您正在运行其他一些事情,并且排队animate
您正在执行等待,直到其他事情完成。
答案 1 :(得分:1)
https://developer.mozilla.org/en/DOM/window.setTimeout有关setTimeout
钳制的一些信息。请参阅“最小延迟”部分。