【问题标题】:For loop not finishing execution only some of the timeFor循环仅在某些时候没有完成执行
【发布时间】:2017-02-14 17:38:09
【问题描述】:

我正在尝试对一些按钮进行编程以点亮并按照我生成的随机数组中的数字顺序播放声音,我将颜色更改为较浅的颜色,而不是将其更改回原来的颜色为了让它们亮起来。有时这可行,然后有时按钮不会恢复到原始颜色,我不知道为什么,我找不到它的图案。谁能看到我的代码做错了什么?

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);
}
  }

【问题讨论】:

  • OK 所以好像是延迟后只执行了一次功能,然后第二次每个按钮亮起就不会变回原来的颜色
  • 你的问题可能是你没有调用next(),就像this answer一样。顺便说一句,你真的应该避免使用这样的 switch 语句。这是一个jsfiddle,可能会给你一些想法。
  • 谢谢 next() 解决了!像这样的 switch 语句是不是很笨拙?
  • switch 语句中的每个 case 都在做同样的事情,只是针对不同的按钮。那是重复的代码,它使添加另一个按钮变得更加困难。这是一个新的jsfiddle,多了一个按钮。它在 html 中添加了另一个 div 和一些 CSS 样式,但 JavaScript 中唯一的变化是在数组中添加了另一个对象。

标签: jquery loops for-loop delay settimeout


【解决方案1】:

JQuery documentation for the .queue() function 表明回调函数传递了一个函数,当调用该函数时“将出列下一个项目”。您应该在回调结束时调用该函数。 (顺便说一句:通常将参数命名为“next”。)

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

感谢this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多