javascript - while 循环中的 setTimeOut

标签 javascript while-loop settimeout

我的目标是创建一个 simon 游戏,我目前正在尝试按如下方式更改每个 div 的颜色:

我正在从 0 到 3 随机存储 div 类;游戏的每次迭代都会向数组中添加一个数字

var save =[];

我想在一秒钟内突出显示紫色的 div,在两秒钟后,将其恢复为指定的 css 颜色并重复此操作,直到它遍历所有保存数组类号。

起初我尝试这样做:

setTimeout(function(){ $("."+save[0]).css("background-color", "purple"); },1000)

setTimeout(function(){ $("."+save[0]).css("background-color", ""); },2000)

setTimeout(function(){ $("."+save[1]).css("background-color", "purple"); },3000)

setTimeout(function(){ $("."+save[1]).css("background-color", ""); },4000)

等等,随着我向 simon 游戏添加更多迭代。

我想改为这样做:

 var i = 0;
  function hello() {
      $("." + save[i]).css("background-color", "purple");
  }

  function goodbye() {
      $("." + save[i]).css("background-color", "");
  }

  var one = 1000;
  var two = 2000;


  while (i < save.length) {
      setTimeout(hello(), one);
      setTimeout(goodbye(), two);

      i++;

      one += 2000;
      two += 2000
  }

我经历了几个堆栈溢出问题,找到了类似的问题,但没有任何帮助。我可以想象有关于创建这款游戏的 YouTube 视频,但我想尽可能多地自己弄清楚,只有这一件事让我摸不着头脑。

最佳答案

根据您对代码和需求的理解,我尝试解决了您的问题。

$(document).ready(function() {
  var changeColor = setInterval(function() {
    var hasClassPurple = $(".wrapper").hasClass("purple");
    if (true === hasClassPurple) {      $(".wrapper").removeClass("purple").addClass("white");
    } else {      $(".wrapper").removeClass("white").addClass("purple");
    }
  }, 1000);
  // Don't forget to add clearInterval when you want to terminate setInterval();
  //clearInterval(changeColor);
});
.purple {
  background-color: purple;
}

.white {
  background-color: white;
}

.wrapper {
  height: 150px;
  width: 150px;
  position: absolute;
  border: 1px solid #cccccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
</div>

$(document).ready(function() {
  var changeColor = setInterval(function() {
    var hasClassPurple;
    $(".div-wrapper").each(function(index) {
      hasClassPurple = $(this).hasClass("purple");
      if (true === hasClassPurple) { $(this).removeClass("purple").addClass("white");
      } else {
       $(this).removeClass("white");  $(this).removeClass("white").addClass("purple");
      }
    });
  }, 1000);
  // Don't forget to add clearInterval when you want to terminate setInterval();
  //clearInterval(changeColor);
});
.wrapper {
  float: left;
  position: absolute;
}

.purple {
  background-color: purple;
}

.white {
  background-color: white;
}

.div-wrapper {
  float: left;
  height: 100px;
  width: 100px;
  position: realtive;
  ;
  border: 1px solid #cccccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='wrapper'>
  <div class="div-wrapper purple">
  </div>
  <div class="div-wrapper white">
  </div>
  <div class="div-wrapper purple">
  </div>
  <div class="div-wrapper white">
  </div>
</div>

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

相关文章:

javascript - settimeout 并等待(如果已设置超时)

javascript - 为什么 Promise.all(array) 没有立即解决?

javascript setTimeout函数在循环内不起作用

javascript - 是否可以将类传递给 Javascript 函数?

c - 无法打印以相反顺序输入到数组中的数字

java - 如何使用 while 或 for 循环反转整数

javascript - 我正在尝试编写 jQuery/JavaScript 代码,该代码将单词列表淡入网页中

javascript - Express 中的 router.METHOD() 和 router.route() 方法有什么区别

javascript - 我无法通过AJAX调用捕获特定浏览器记录的错误。捕获这些可能吗?

javascript - 在 JavaScript 中绘制文本字段的实现