Timer clearInterval不';行不通

Timer clearInterval不';行不通,timer,setinterval,clearinterval,Timer,Setinterval,Clearinterval,我不知道如何正确处理clearInterval(ou clearTimeout)函数 上下文:显示具有特定暂停时间的多个图像。如果我让滑块播放,暂停时间是正确的,没有什么可说的。如果我决定跳转到一个特定的图像,尽管有一个clearInterval,计时器并没有设置为0,因此这个图像显示得太短(旧的计时器仍然处于活动状态) 下面我的js代码有什么问题 谢谢 function pauseImage () { var rest=null; clearInterval(rest); rest=s

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

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

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

谢谢

function pauseImage () {

var rest=null;

clearInterval(rest); 

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

};

您可以尝试以下方法来创建并清除间隔:

var IntervalObject = self.setInverval("nameOfFunction()", 5000);

//following your example
//var IntervalObject = self.setInverval(function(){ ... },5000)

//to clear it
self.clearInterval(IntervalObject);
我希望这有帮助


我想您刚刚错过了
self

rest
的功能范围。每次调用函数时,它都会被重置。把它移到更大的范围

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

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

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

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

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

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

因此,当您稍后清除间隔时,您只清除*顶级间隔,然后设置下一个级别间隔。 (顶级可能不是正确的词)

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

设置间隔:

if(!timer)   
    timer =setInterval(myFunction, 1000);
clearInterval(timer);
timer=null;
while (timer!== null){
    timer=null;
}
清除间隔:

if(!timer)   
    timer =setInterval(myFunction, 1000);
clearInterval(timer);
timer=null;
while (timer!== null){
    timer=null;
}
您可能会决定清除while循环中的间隔,但我发现这对我来说是有效的,而且效率更高

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


观察得好,昆汀,我回答的时候没看到。嗨,昆汀。非常感谢您,此修复已成功!干杯PascalYou不应该将字符串传递给
setInterval
,它会破坏作用域,速度慢,并且很难调试。感谢您提供的额外信息,我将在以后的代码中记住它。