setTimeout阻塞问题

时间:2017-07-18 15:25:57

标签: javascript jquery conways-game-of-life

我正在写一篇“生命游戏”。我在名为doGeneration()的函数中完成了所有逻辑。我可以从控制台反复调用它,一切都按计划进行,但是,如果我把它放在while循环中,执行会阻止UI,我只看到最终结果(最终)。

while (existence) {
    doGeneration();
}

如果我添加setTimeout(),即使生成限制为15,浏览器实际上也会崩溃(Canary,Chrome)。

while (existence) {
    setTimeout(function() {
        doGeneration();
    },100);
}

如何在不阻止DOM / UI的情况下每隔一秒左右调用doGeneration()一次?

3 个答案:

答案 0 :(得分:5)

你想要setInterval

 var intervalId = setInterval(function() {
     doGeneration();
 }, 1000);

 // call this to stop it
 clearInterval(intervalId);

答案 1 :(得分:2)

我会使用requestAnimationFrame(doGeneration)。这个功能的想法是让浏览器决定游戏逻辑或动画执行的间隔。这带来了潜在的好处。

https://hacks.mozilla.org/2011/08/animating-with-javascript-from-setinterval-to-requestanimationframe/

答案 2 :(得分:0)

而不是使用setINtervalsetTimeout并假设一些随机时间间隔足以使UI更新你应该/ doGeneration足够智能调用更新dom后,如果满足existence的条件,