如何使用 Vanilla JS 通过检查和取消选中复选框时的 clearInterval() 来触发 setInterval()?

How to Trigger setInterval() by checking and clearInterval() on unchecking a Checkbox, using Vanilla JS?

我正在尝试启动 setInterval(),当复选框被选中和取消选中时,我想使用 clearInterval() 清除间隔。

但是,出了点问题,clearInterval() 无法正常工作。如果有人能在这里帮助我,我会很高兴。

document.getElementById('slide').addEventListener('change', function() {
    if(this.checked) {
        var auto= setInterval(function () {
            console.log('hello');
        },1000);
        
    }
    else{
        console.log("setInterval Cleared");
        var auto=clearInterval(auto);
    }
});
<div class="slide-input">
  <input type="checkbox" id="slide"> Slide
</div>

问题是,当您执行 clearInterval 时,您没有保存间隔的 ID,因为变量是在函数作用域中创建的。您应该将其声明为顶级:

var auto;
document.getElementById('slide').addEventListener('change', function() {
    if(this.checked) {
        auto = setInterval(function () {
            console.log('hello');
        },1000);

    }
    else{
        console.log("setInterval Cleared");
        auto = clearInterval(auto);
    }
});

这是一条路:

var auto = null;
document.getElementById('slide').addEventListener('change', function() {
    
    if(this.checked) {
        auto=setInterval(function () {
            console.log('hello');
        },1000);
    }
    else{
        console.log("setInterval Cleared");
        clearInterval(auto);
    }
});
<div class="slide-input">
  <input type="checkbox" id="slide"> Slide
</div>

您必须将 var auto 声明在事件侦听器的范围之外,以便 clearInterval 函数知道需要清除哪个间隔