javascript - 我可以在一个 setInterval 中插入多个 setTimeouts 吗?

标签 javascript html settimeout setinterval

我刚开始学习 JavaScript,现在,我正在制作一个可以亮起红色、绿色和橙色的虚拟交通灯。我想通过在外部添加 setInterval 来进行循环。这是可能的还是我应该使用其他方法来制作循环。我尝试制作一个 for(;;){} 但这会导致错误并且网页永远不会加载。这是我当前的代码。

var red = document.getElementById("circleRed");
var orange = document.getElementById('circleOrange')
var green = document.getElementById('circleGreens');
    
setInterval(
    
  setTimeout( function(){
    red.style.backgroundColor = "red";
  }, 2000),
    
   setTimeout(function(){
      green.style.backgroundColor = "green";
      red.style.backgroundColor = "black";
   }, 5000),
    
    setTimeout(function(){
      orange.style.backgroundColor = "orange";
      green.style.backgroundColor = "black";
    }, 10000),
    
    5000);
#circleRed, #circleGreens, #circleOrange {
    width: 50px;
    height: 50px;
    -webkit-border-radius: 25px;
    -moz-border-radius: 25px;
    border-radius: 25px;
    margin-bottom: 10px;
    background-color: "black";
}

.back {
    width: 60px;
    margin: 10px 0px 10px 20px;
    padding-left: 10px;
    padding-top: 10px;
    padding-bottom: 10px;
    background-color: black;
}
    
body{
    margin: 0;
}
<div class="back">
  <div id="circleRed">
  </div>
  <div id="circleOrange">
  </div>
  <div id="circleGreens">
  </div>
</div>

最佳答案

您可以在loop 函数中调用所有setTimeout 函数。并使用 setInterval 调用此循环函数。 注意:我还更改了您代码中的一些颜色更改部分。

jsfiddle 链接:https://jsfiddle.net/zgdx5xan/

var red = document.getElementById("circleRed");
var orange = document.getElementById('circleOrange')
var green = document.getElementById('circleGreens');

loop();
setInterval(loop,11000);

function loop(){
	console.log("loop started")
  setTimeout( function(){
    red.style.backgroundColor = "red";
    orange.style.backgroundColor = "black";
    green.style.backgroundColor = "black";
    console.log("red opened")
  }, 2000);

   setTimeout(function(){
    green.style.backgroundColor = "green";
    red.style.backgroundColor = "black";
    console.log("green opened")
  }, 5000);

  setTimeout(function(){
    orange.style.backgroundColor = "orange";
    green.style.backgroundColor = "black";
    red.style.backgroundColor = "black";
    console.log("orange opened")    
  }, 10000);
}
#circleRed, #circleGreens, #circleOrange {
  width: 50px;
  height: 50px;
  -webkit-border-radius: 25px;
  -moz-border-radius: 25px;
  border-radius: 25px;
  margin-bottom: 10px;
  background-color: "black";
}



.back{
  width: 60px;
  margin: 10px 0px 10px 20px;
  padding-left: 10px;
  padding-top: 10px;
  padding-bottom: 10px;
  background-color: black;
}

body{
  margin: 0;
}
 
   <div class="back">
    <div id="circleRed">

    </div>
    <div id="circleOrange">

    </div>
    <div id="circleGreens">

    </div>
  </div>
 

关于javascript - 我可以在一个 setInterval 中插入多个 setTimeouts 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47387491/

相关文章:

javascript - For 循环不会结束使用 Node.js

javascript - Google 脚本错误 - UrlFetchApp 与 Facebook Graph Api 带来许多 urlfetch

jquery - 如何将工具提示添加到表中的 td

html - CSS 和响应式设计

javascript - 在 componentWillReceiveProps 函数中调用 setTimeout 时无法解析模块计时器

javascript - 在dimplejs 中显示之前操作数据

javascript - 为什么某些输入元素具有 setSelectionRange 属性以及如何测试它是否确实受支持?

javascript - 没有 jQuery 的带有自定义滚动条的 HTML 表格

javascript - 当页面不活动时停止 setTimeout 循环,当页面事件时重新启动

jquery - 尝试使用 setTimeout 来创建一个小的延迟,但它不起作用