无法在javascript中管理for循环中的超时

时间:2017-09-23 23:56:40

标签: javascript

我正在尝试用javascript做某种西蒙游戏。我已经创建了一个表,并且一个函数可以将任何单元格的id更改为另一个id,因此它的颜色变化为300毫秒。这是代码:

var seleccionarcelda = function(object){
  var id=object.id;
  object.id="selected";
  setTimeout(function(){object.id=id;},300);
}

然后,对于我想要的大小的序列,它应该点亮一个随机单元格,然后在for循环中点亮另一个单元格

var secuencia = function(numero){
  for(j=0; j<numero; j++){
      var cel="t"+ Math.floor((Math.random() * 6) + 1);
      console.log(cel);
      seleccionarcelda(document.getElementById(cel));
  }
}

问题在于它有效,但是一次选择所有单元格,而不是按照它应该做的顺序。我该如何解决?

1 个答案:

答案 0 :(得分:1)

您可以将循环索引传递给函数,并将其用作延迟时间的乘数。

类似的东西:

var seleccionarcelda = function(object, index){
  // increment delay timer
  var delay = (index + 1) * 300;

  var id=object.id;
  object.id="selected";
  setTimeout(function(){object.id=id;}, delay );// use variable for timer delay
}

var secuencia = function(numero){
  for(j=0; j<numero; j++){
      var cel="t"+ Math.floor((Math.random() * 6) + 1);
      console.log(cel);
      // pass j to function
      seleccionarcelda(document.getElementById(cel), j);
  }
}

现在发生的事情是循环以毫秒为单位完成,因此所有setTimeout基本上都在同一时间开始