【发布时间】:2022-01-10 14:15:17
【问题描述】:
我可能以完全错误的方式处理这个问题,因为我在 javascript 方面有点新手,但基本上我想要做的(为了一点乐趣)是拥有一个单元格的表格在点击时改变颜色,然后让北、东、南和西的单元格依次变为不同的颜色(想想炸弹人中的炸弹效果)。
到目前为止,我已经设法使用以下代码使南向工作:
function timeOutDown(i) {
let bubbleRowPositive = col + rowArray[i];
let bubbleRowPositiveId = document.getElementById(bubbleRowPositive);
setTimeout(function() {
bubbleRowPositiveId.style.backgroundColor = "#AA3333";
},i * 50);
}
for (let i=row; i<colArray.length; i++) {
timeOutDown(i);
}
对于上下文,有 15 行和 15 列大小均匀的表格单元格,ID 类似于“a1”和“h14”。
但是,我遇到的问题是,即使反转 for 循环,逆仍会向上迭代,我不知道为什么:
function timeOutUp(k) {
let bubbleRowNegative = col + rowArray[k];
let bubbleRowNegativeId = document.getElementById(bubbleRowNegative);
setTimeout(function() {
bubbleRowNegativeId.style.backgroundColor = "#AA3333";
console.log(`Index: ${k}, Row Num: ${rowArray[k]}`);
},k * 50);
}
for (let k=row-2; k>=0; k--) {
timeOutUp(k);
console.log(k);
}
我开始使用相同的函数来处理两个 for 循环,但没有成功,因此我尝试使用 2 个单独的函数来使用此方法。
有没有更简单的方法来解决这个问题?
【问题讨论】:
-
因为你的延迟没有改变?它仍然适用于
k*50那里的每次超时迭代,所以第一个延迟 0,第二个延迟 50 等等......如果你反转你的循环,这不会改变,因为你传入了索引。您可能想要添加另一个计数器变量并像以前一样将其传递给计数。 -
延迟是造成“气泡”效果的原因,因此您单击的单元格变为红色 - 然后周围的单元格应该变成不同的颜色,远离单击的单元格。我发现“气泡”效果从被点击的单元格向下移动,但向上面那些被点击的单元格移动。延迟是产生连锁反应的唯一因素。
-
我不是说删除你的延迟,我是说你的反向循环对计算的延迟没有影响,因为它们是基于索引的,而不是基于顺序的。简而言之
k * 50 === i * 50,没有什么改变。 -
啊,我明白了,对不起。看来我将不得不采取完全不同的方法
-
只存储实际的呼叫顺序(我把它放在我的答案中)。基本上保留另一个变量来跟踪订单(
i)和一个索引(k)。i向上计数,k向下计数。
标签: javascript for-loop settimeout