clearInterval()不起作用

Mat*_*hez 32 javascript scope setinterval clearinterval

可能重复:
JS - 如何在使用setInterval()后清除间隔

我有一个函数,font-family每500毫秒更改一些文本使用setInterval(我只是练习JavaScript.)通过单击"开"按钮调用该函数,并且应该使用单独的按钮清除间隔,"关闭".但是,"关闭"按钮实际上并没有清除间隔,它只是继续.我怀疑这与范围有关,但我不确定如何以其他方式编写它.另外,我不想用jQuery做这个,因为毕竟我正在做这个学习.

<body>
<p><span id="go" class="georgia">go</span> Italian</p>
<p>
    <button id="on" type="button" value="turn on">turn on</button>
    <button id="off" type="button" value="turn off">turn off</button>
</p>

<script>
var text = document.getElementById("go");
var on = document.getElementById("on");
var off = document.getElementById("off");

var fontChange = function() {
    switch(text.className) {
        case "georgia":
            text.className = "arial";
            break;
        case "arial":
            text.className = "courierNew";
            break;
        case "courierNew":
            text.className = "georgia";
            break;      
    }
};

on.onclick = function() {
    setInterval(fontChange, 500);
};

off.onclick = function() {
    clearInterval(fontChange);
}; 
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

Kon*_*nev 56

setInterval 返回一个ID,然后用它来清除间隔.

var intervalId;
on.onclick = function() {
    if (intervalId) {
        clearInterval(intervalId);
    }
    intervalId = setInterval(fontChange, 500);
};

off.onclick = function() {
    clearInterval(intervalId);
}; 
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但是如果你在多次运行它的情况下使用setInterval()(或setTimeout()),你会遇到另一个问题.如果您单击两次,则永远不会清除第一个setInterval().您需要if(intervalId!== undefined){intervalId = setInterval(...或者如果您希望每增加一次点击时更多setIntervals,请将intervalId设为数组) (20认同)

Jon*_*ton 5

setInterval函数返回一个整数值,它是您创建的“计时器实例”的 id。

这是您需要传递给的整数值 clearInterval

例如:

var timerID = setInterval(fontChange,500);
Run Code Online (Sandbox Code Playgroud)

然后

clearInterval(timerID);
Run Code Online (Sandbox Code Playgroud)