如何設置一個帶有向後迭代的 settimeout 的 for 循環?

WAVR_

我可能以完全錯誤的方式處理這個問題,因為我在 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 個單獨的函數來使用這種方法。

有沒有更簡單的方法來解決這個問題?

這裡的東西

即使您的 for 循環反轉,它仍然為每次迭代傳遞相同的索引,並且該索引用於計算它獲得的延遲。所以無論如何,索引處的項目0都會有0*50幾毫秒的延遲,無論它是先發生還是最後發生。您仍然需要您的原始計數器來定義它們的有序索引。你可以這樣解決:

function timeOutUp(k, i) {
  let bubbleRowNegative = col + rowArray[k];
  let bubbleRowNegativeId = document.getElementById(bubbleRowNegative);

  setTimeout(function() {
    bubbleRowNegativeId.style.backgroundColor = "#AA3333";
    console.log(`Index: ${k}, Row Num: ${rowArray[k]}`);
  },i * 50);
}

for (let k=row-2, i = 0; k>=0; k--, i++ ) {
  timeOutUp(k, i);
  console.log(k, i);
}

我剛剛添加了 1 個變量:i重新輸入,計數。它被傳遞到timeOutUp以您想要的順序計算實際延遲。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章