停止循环播放javascript

时间:2016-10-01 15:00:56

标签: javascript loops

我正在使用此脚本替换页面上的某些文字。

function initChangeText() {
  var time = 2;
  setInterval('changeText();', time * 1000);
}

function changeText() {
  var divs_ = document.getElementsByTagName("div")
  for (var i = 0; i < divs_.length; i++)
    if (divs_[i].className == "change")
      changeULText(divs_[i]);    
}

function changeULText(obj) {
  var ul = obj.getElementsByTagName("ul")[0];
  var li = obj.getElementsByTagName("li");
  for (var i = 0; i < li.length; i++) {
    if (li[i].className == "show") {
      li[i].className = "";
      li[(i + 1) % li.length].className = "show";
      return;
    }
  }
}
window.onload = initChangeText;

问题是这个脚本是自己循环的。而且我不想要它。我希望它执行一次然后停止。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

此:

function initChangeText() {
  var time = 2;
  setInterval('changeText();', time * 1000);
}

每秒调用一次脚本。删除该功能并将window.onload = initChangeText;更改为window.onload = changeText;

答案 1 :(得分:1)

正如Crayon Violent在评论中所说,您应该使用setTimeout代替setInterval

来自Mozilla开发者网络:

  • setTimeout
      

    在计时器到期后设置一个计时器执行一个函数或指定的代码一次

  • setInterval
      

    反复调用函数或执行代码段,每次调用之间有固定的时间延迟。返回intervalID。

您也可以在一段时间后或使用计数器进行多次循环后清除setInterval

经过一段时间后
假设您要执行3000 ms的循环。然后你可以这样做:

function initChangeText() {
  var time = 2;
  // Store the id to be able to clear it
  var intervalId = setInterval('changeText();', time * 1000);
  // Clear the interval 3000 ms after the interval started
  setTimeout(function() {window.clearInterval(intervalId);}, time * 1000 + 3000);
}

function changeText() {
  // remains the same
}

function changeULText(obj) {
  // remains the same
}
window.onload = initChangeText;

经过多次循环后
假设你想要执行你的循环6次。你可以这样做:

var loopCount = 0; // Initialize a global counter
var intervalId;  //  Store the ID in the global scope
function initChangeText() {
  var time = 2;
  intervalId = setInterval('changeText();', time * 1000); // Stores the ID
}

function changeText() {
  // Add an if statement to clear the intervalId when
  // the loopCount reaches the limit of 6 repetitions
  if(++loopCount >= 6 && intervalId) {
    window.clearInterval(intervalId);
  }
  // rest of the function remains the same   
}

function changeULText(obj) {
  // remains the same
}
window.onload = initChangeText;

答案 2 :(得分:0)

window.onload = changeText;
或者,如果你想保持初始超时: 将setInterval替换为setTimeout