0

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

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

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

谢谢!

function pauseImage () {

var rest=null;

clearInterval(rest); 

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

};
4

3 回答 3

2

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

var rest;
function pauseImage () {
  clearInterval(rest); 
  rest=setInterval(function() { ...go to the next slide...}, 5000);
};
于 2012-08-01T12:59:46.700 回答
0

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

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

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

//to clear it
self.clearInterval(IntervalObject);

我希望这有帮助!

我想你只是错过了self.

于 2012-08-01T12:56:53.873 回答
0

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

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

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

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

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

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

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

设置间隔:

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

清除间隔:

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

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

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

于 2020-06-19T07:42:34.557 回答