2016-11-20 47 views
0

我正在尝试构建一个Simon说的游戏,现在我被困在想要点亮用户必须单击的按钮的部分。我用一个“for”来分析我存储序列的每一部分数组,然后数组应该到每一轮并点亮按钮,就像这样;开始和结束。但由于某些原因,“for”会同时更改已传入数组的每个div的背景,即使我正在使用项目间隔来停止按钮。与JS的间隔和延迟

这里是我的工作的codepen:

https://codepen.io/argestis/pen/gLraBq?editors=0011

function litSequence() { 
    for (var i = 0; i < game.count.length; i++) { 
    if (game.count[i] === 1) { 
     game.blue.css("background-color", "cyan"); 
     setTimeout(function() { 
     game.blue.css("background-color", "blue"); 
     }, 1500); 

    } else if (game.count[i] === 2) { 
     game.red.css("background-color", "pink"); 
     setTimeout(function() { 
     game.red.css("background-color", "red"); 
     }, 1500); 

    } else if (game.count[i] === 3) { 
     game.green.css("background-color", " #4dff4d"); 
     setTimeout(function() { 
     game.green.css("background-color", "green"); 
     }, 1500); 

    } else if (game.count[i] === 4) { 
     game.yellow.css("background-color", "orange"); 
     setTimeout(function() { 
     game.yellow.css("background-color", "yellow"); 
     }, 1500); 
    } 
    } 
}; 
+0

它看起来像你的codepen正在加载许多jQueries后引导JS – mplungjan

回答

1

setTimeout不-stop-你的逻辑。您可以将其视为创建逻辑运算的并行点。您的逻辑将继续运行,并且只有在该时间过后,超时中的逻辑才会执行。由于js运行速度非常快,最有可能的情况是,循环中的所有setTimeout都会相互靠近,以便同时出现。

+0

有什么办法可以停止循环,所以它可以逐渐以较慢的速度开火? –

+1

不要试图停止逻辑流程,而应考虑动态分配延迟时间以使其增长,以便按期望的顺序进行。或者,也许它会像改变你的延迟时间一样简单,就是'(game.count [i] * 1500)' – Taplar