<!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函数实现到该函数中时,灯光仅从红色-黄色-绿色-红色改变。
感谢您的任何帮助!

最佳答案

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

<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

07-24 15:42