【问题标题】:clearInterval doesn't work清除间隔不起作用
【发布时间】:2020-06-19 15:42:34
【问题描述】:

我不知道如何正确处理 clearInterval (ou clearTimeout) 函数。

上下文:显示具有特定暂停时间的多个图像。如果我让滑块播放,暂停时间是正确的,没什么好说的。如果我决定跳转到特定图像,尽管有 clearInterval,但计时器并未设置为 0,因此该图像显示得太短(旧计时器仍处于活动状态)。

下面的 js 代码有什么问题?

谢谢!

function pauseImage () {

var rest=null;

clearInterval(rest); 

rest=setInterval(function() { ...go to the next slide...}, 5000);

};

【问题讨论】:

    标签: timer setinterval clearinterval


    【解决方案1】:

    rest 作用于函数。每次调用该函数时都会重置。将其移至更广的范围。

    var rest;
    function pauseImage () {
      clearInterval(rest); 
      rest=setInterval(function() { ...go to the next slide...}, 5000);
    };
    

    【讨论】:

    • 很好的观察昆汀,当我回答时我没有看到。
    • 嗨昆汀。非常感谢,此修复已成功!干杯。帕斯卡
    【解决方案2】:

    您可以尝试这样的方法来创建和清除间隔:

    var IntervalObject = self.setInverval("nameOfFunction()", 5000);
    
    //following your example
    //var IntervalObject = self.setInverval(function(){ ... },5000)
    
    //to clear it
    self.clearInterval(IntervalObject);
    

    我希望这会有所帮助!

    我想你只是错过了self

    【讨论】:

    • 你永远不应该将字符串传递给setInterval,它会破坏作用域,速度很慢,而且很难调试。
    • 感谢您提供额外信息,我会在以后的代码中记住这一点。
    【解决方案3】:

    首先,您的问题在于变量 rest 的范围,按照其他答案的建议将其设为全局。

    但除此之外,您仍然会遇到另一个问题,即您发现 clearInterval() 似乎不起作用,那么下面的答案就派上用场了--

    所以,我遭受同样的问题太多次了,通常我只是顺其自然, 但大多数时候我意识到在清除间隔后间隔继续运行,这可能会影响设备的性能(就像有一个无限循环)。

    所以我做了一些研究,发现了问题所在,并编写了一个简单的代码来解决它。

    现在,在大多数情况下,当您开始一个间隔(很可能由事件触发)时,会声明该间隔的多个实例(无论出于何种原因)...

    所以以后清除区间时,只清除*top-level区间,下一级区间设置。 (顶级可能不是正确的词)

    所以为了真正清除间隔我使用了以下方法:

    设置间隔:

    if(!timer)   
        timer =setInterval(myFunction, 1000);
    

    清除间隔:

    clearInterval(timer);
    timer=null;
    while (timer!== null){
        timer=null;
    }
    

    您可能决定清除 while 循环内的时间间隔,但我发现这对我有用,而且比这更有效。

    确保检查间隔变量的范围(即上述情况下的计时器)

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多