javascript - for循环中的setTimeout

标签 javascript settimeout

目前,我正在尝试为自己制作一个小游戏,以便在制作和使用它的过程中获得乐趣,但我陷入了困境。

我想制作一个内存游戏,其中程序生成一个特定的数组,其中填充了应该更改的箭头的名称。因此,例如:左、左、上、下、右,我想将左箭头第一次更改为绿色,然后再恢复正常,因为第二次它会发生两次,因为数组的第 2 个元素是“左” ”。

所以我一直在尝试在 JS 中使用 setTimeout 并尝试查找如何使用它并设法慢慢前进,但我在所有解释中迷失了方向。

我当前的代码更改了绿色数组中列出的所有箭头,然后将它们一一一一更改回正常状态(实际上我根本看不到第一个箭头的变化,但我认为它只是 setTimeout 不适用于因为其余部分正在改变)。

for (var j = 0; j < narray.length; j++) {

var image = document.getElementById(narray[j]);

 image.src = "arrow-"+narray[j]+"-good.png";
  function(j){
   sesetTimeout(function(){
   var image2 = document.getElementById(narray[j]);
   image2.src = "arrow-"+narray[j]+".png";
}, j*1000);
})(j);

我知道这真的很困惑,但我完全迷失在我试图学习的教程中。因此,如果有人可以帮助我,我将非常感激。 提前致谢!

最佳答案

这是我认为可行的方法。

k=0;
for (var j = 0; j < narray.length; j++) {

    var image = document.getElementById(narray[j]);

    image.src = "arrow-"+narray[j]+"-good.png";
    setTimeout(function(){
       var image2 = document.getElementById(narray[k]);
       image2.src = "arrow-"+narray[k]+".png";
       k++;
    }, j*1000+500);
}

因此,除了拼写错误之外,在超时函数中使用 for 循环中的“j”也存在问题,因为它们运行得较晚。因此,我们引入“k”来跟踪我们已经完成了多少次。因此 k 每次都会递增,这里它是一个全局变量,因此当每个超时函数实际运行时,k 将是一个不同的数字,并且会递增 k 为下一个将被调用的函数做好准备。

关于javascript - for循环中的setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31817840/

相关文章:

javascript - 如何从 MVC Controller 访问 JSON 属性

javascript - react native Swift 回调

javascript - 动态扩展 Canvas 而不拉伸(stretch)绘制的内容

javascript - 清除后如何重新启动 settimeout 循环 javascript?

javascript - 如何在 ES6 或 Javascript 中的 settimeout 函数之后触发不受我们控制的函数?

在 KRL 应用程序中清除 Facebook 上的 JavaScript setTimeout

javascript - 如何在 JavaScript 中向当前年份添加特定年份?

javascript - 如果单击按钮,如何强制光标进入输入字段?

javascript - setTimeout问题,没有超时

javascript - 使用 JQuery 更改背景