对于循环没有完成执行只有一些时间

时间:2017-02-14 17:38:09

标签: jquery loops for-loop delay settimeout

我尝试编程一些按钮点亮并按照我生成的随机数组中的数字顺序播放声音,我将颜色更改为比更改颜色更浅的颜色它回到原来,以使它们亮起来。有些时候这个工作,然后有些时候按钮不会回到原来的颜色,我不知道为什么,我无法找到它的模式。任何人都可以看到我的代码出错吗?

var  turn = 19;
var b = 0;  
 function flash(button, light) {
button.addClass(light).delay(500).queue(function(){button.removeClass(light);})
  } 

  function lightUp() {
switch (game[b]) {
  case 1:
    one.play();
    flash($("#1"),"onelit");
    break;
  case 2:
    two.play();
    flash($("#2"),"twolit");
    break;
  case 3:
    three.play();
    flash($("#3"),"threelit");
    break;
  case 4:
    four.play();
    flash($("#4"),"fourlit");
    break;
}

b++;
if (b < turn) {
  setTimeout(lightUp, 2000);
}
  }

1 个答案:

答案 0 :(得分:1)

JQuery documentation for the .queue() function表示回调函数传递的函数在被调用时#34;将使下一个项目出列&#34;。你应该在回调结束时调用该函数。 (顺便说一句:通常将参数命名为&#34; next&#34 ;.)

function flash(button, light) {
    button.addClass(light).delay(500).queue(function(next) {
        button.removeClass(light);
        next();
    });
} 

感谢this answer