【发布时间】:2020-03-14 06:32:06
【问题描述】:
我正在用 javascript 制作一个记忆游戏,并将其放在我的网页上。我有 3 个标记为 1、2 和 3 的按钮,它们应该按一定的顺序变成绿色然后再变成白色。顺序是随机的,每回合加1。然后玩家应该以正确的顺序点击按钮。问题是,当我将按钮颜色更改为绿色时,不是每个按钮按正确的顺序变为绿色然后再次变为白色,而是按钮一次全部变为绿色。这是javascript逻辑:
function lightUp() {
var arrayOrder = gameOrder.split("");
for(let i = 0; i < arrayOrder.length; i++) {
document.getElementById("but" + arrayOrder[i]).style.backgroundColor = "green";
setTimeout(function() {
document.getElementById("but" + arrayOrder[i]).style.backgroundColor = "white";
}, 1000);
}
}
gameOrder是一个数字顺序的字符串(例如“12331232123”)
我认为游戏无法运行是因为 setTimeout 的工作方式,我相信它会在后台暂停并允许 for 循环继续运行而不是暂停整个函数一秒钟(这就是我正在尝试)。
我希望每个按钮在下一个按钮改变颜色之前打开然后关闭。因此,如果顺序是 1 2 3,我希望按钮 1 变为绿色然后变为白色,然后按钮 2 变为绿色然后变为白色,最后按钮 3 变为绿色然后变为白色。
【问题讨论】:
-
因为它们都同时运行设置为绿色并且它们都在 1000 毫秒时关闭,所以它们不是同步的。
-
我怎样才能修复代码,让一个打开然后关闭,然后再下一个?
-
建立一个队列类型的设置而不是一个循环。
-
您可以使用 for 循环逐步设置超时
标签: javascript