首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript红绿灯

Javascript红绿灯
EN

Stack Overflow用户
提问于 2017-04-25 01:51:07
回答 5查看 595关注 0票数 3

代码语言:javascript
复制
<!DOCTYPE>
<html>
<body>

<img id="traffic" src="assets/red.gif">

<button type="button" onclick="ChangeLights()">Change Lights</button>

<script>
var lights = [
	"assets/red.gif",
	"assets/yellow.gif",
	"assets/green.gif",
	"assets/yellow.gif",
];

var index = 0;

function ChangeLights() {

  setInterval(function () {ChangeLights();}, 1000);
  
	index = index + 1;
	
	if (index == lights.length) index = 0;
	
	var image = document.getElementById('traffic');
    image.src=lights[index];

}


</script>

</body>
</html>

嗨,我正在尝试用JavaScript制作一个动画脚本,这样一旦按下按钮,红绿灯序列就会从定时器上的红-黄-绿-黄改变。我只想让序列循环一次。但是,当我在函数中实现setInterval函数时,灯只从红-黄-绿-红改变。谢谢你的帮助!

EN

回答 5

Stack Overflow用户

发布于 2017-04-25 02:26:57

代码语言:javascript
复制
var lights = {
  red: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Traffic_lights_red.svg/200px-Traffic_lights_red.svg.png",
  yellow: "https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Traffic_lights_yellow.svg/200px-Traffic_lights_yellow.svg.png",
  green: "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Traffic_lights_dark_green.svg/200px-Traffic_lights_dark_green.svg.png"
};

var sequence = ['red', 'yellow', 'green', 'yellow'];

function startChangeLights() {
  for (var index = 0; index < sequence.length; index++) {
    changeLight(index, sequence[index]);
  }

  function changeLight(index, color) {
    setTimeout(function() {
      var image = document.getElementById('traffic');
      image.src = lights[color];
    }, index * 1000);
  }
}
代码语言:javascript
复制
<div>
  <img height=100px id="traffic" src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Traffic_lights_red.svg/200px-Traffic_lights_red.svg.png">
</div>
<div>
  <button type="button" onclick="startChangeLights()">Change Lights</button>
</div>

https://codepen.io/anon/pen/VbKQNj?editors=1011

票数 1
EN

Stack Overflow用户

发布于 2017-04-25 02:00:25

如果你正在寻找一个时间序列,你必须在javascript中使用"setTimeout“方法,另外,定义一个内部函数,如下所示:

代码语言:javascript
复制
var lights = [
	"assets/red.gif",
	"assets/yellow.gif",
	"assets/green.gif",
	"assets/yellow.gif",
];

var index = 0;

function ChangeLights() {

  
  function innerChangeLight(){
	index = index + 1;
	
	if (index == lights.length) index = 0;
	
	var image = document.getElementById('traffic');
    image.src=lights[index];
  }
  innerChangeLight();
  setTimeout(function () {
      innerChangeLight();
    }, 1000);
  
}
代码语言:javascript
复制
<!DOCTYPE>
<html>
<body>

<img id="traffic" src="assets/red.gif">

<button type="button" onclick="ChangeLights()">Change Lights</button>

</body>
</html>

票数 0
EN

Stack Overflow用户

发布于 2017-04-25 02:08:04

试试这个:

代码语言:javascript
复制
var lights = [
	"assets/red.gif",
	"assets/yellow.gif",
	"assets/green.gif",
	"assets/yellow.gif",
];

var index = 0;
function ChangeLights(){
  setInterval(function() {
    
    if(index == lights.length) {
      return;
    }
    var image = document.getElementById('traffic');
    image.src=lights[index];
    index = index + 1;
  }, 1000);
  
}
代码语言:javascript
复制
<img id="traffic" src="assets/red.gif"><br>
<button onclick="ChangeLights()">Change Lights</button>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43594730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档