如何让 clearInterval() 在 JavaScript 中循环工作

How to get clearInterval() to work in a loop in JavaScript

所以我试图让一个函数每秒一次到 运行,然后在四秒后我希望它停止使用 clearInterval()

function dotdotdot(){
var x = 0;
setInterval(function(){
    if (x>=3){
    torpWri = torpWri + ".";
    document.getElementById("torpTxt").innerHTML = torpWri;
    x++;
    }
    else{
        x = 0;
        clearInterval();
    }
    },1000);
}

这是我的函数,它应该在四秒后停止,然后在我再次调用它时将 x 重置为 0。

function loadButton(){
torpWri = "Torpedo Loading"
if(torpLoadAmount[arNum]<5){
    torpLoadAmount[arNum]++;
    torpAmount--;
    document.getElementById("torpCnt").innerHTML = torpAmount;
    document.getElementById("torpTxt").style.visibility = "visible";
    document.getElementById("butunload").disabled=true;
    document.getElementById("butfire").disabled=true;
    document.getElementById("torpTxt").innerHTML = torpWri;
    dotdotdot();
}
else{
    document.getElementById("torpTxt").style.visibility = "visible";
    document.getElementById("torpTxt").innerHTML = "Torpedo Bay Full";
}
timer3();
}

我就是这样称呼它的。 我只需要知道为什么它不是每秒 运行 调用函数 dotdotdot(); 然后在四点后停止。然后当我再次调用它时,它应该全部重置。但不是运行宁...

找了一段时间没找到,所以才来的

(另外,请不要评论我的其他代码,我知道可能有更简单的方法,但这就是我现在正在使用的方法。)

您需要在设置间隔时存储句柄/间隔Id,然后在要清除间隔时使用它:

function dotdotdot(){
    var x = 0;
    var intervalId = -1;
    intervalId = setInterval(function(){
        if (x>=3){
            torpWri = torpWri + ".";
            document.getElementById("torpTxt").innerHTML = torpWri;
            x++;
        } else {
            x = 0;
            clearInterval(intervalId);
        }
    },1000);
}

更多信息:https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Timers

setInterval 会 return 一个 timerid。所以喜欢

var timer = setInterval(fun......)

然后

clearInterval(timer)

setInterval returns一个timerID,需要传给clearInterval.

var ticks = 0;
var intervalID = setInterval(function() {
  if (++ticks == 4) {
    clearInterval(intervalID);
  }
}, 1000);

您也可以改用 setTimeout,只是在满足条件时不安排新报价。

setTimeout(function callback(ticks) {
  if (ticks > limit) {
    return;
  }

  setTimeout(callback, 0, ++ticks);
}, 1000, 0)