clearInterval不起作用

时间:2012-08-01 12:52:52

标签: timer setinterval clearinterval

我无法弄清楚如何正确处理clearInterval(ou clearTimeout)函数。

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

我的js代码可能出现什么问题?

谢谢!

function pauseImage () {

var rest=null;

clearInterval(rest); 

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

};

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

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

我希望这有帮助!

我认为你错过了self

答案 2 :(得分:0)

首先,您的问题与变量 pkg_check_modules(winrm openwsman++ openwsman) IF (${winrm_FOUND}) include_directories(${winrm_INCLUDE_DIRS}) add_definitions(-DHAVE_WINRM=openwsman) target_sources(launch PRIVATE src/exec_impl_winrm_openwsman.cpp) target_link_libraries(Tests PRIVATE ${winrm_LIBRARIES}) ENDIF() 的范围有关,请根据其他答案的建议将其设置为全局变量。

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

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

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

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

因此,当您以后清除间隔时,仅清除* top-level间隔,然后设置下一个级别间隔。 (顶层可能不是正确的单词)

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

设置时间间隔:

rest

清除间隔:

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

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

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