我无法弄清楚如何正确处理clearInterval(ou clearTimeout)函数。
上下文:显示具有特定暂停时间的多个图像。如果我让滑块播放,暂停时间是正确的,没什么好说的。如果我决定跳转到特定图像,尽管有一个clearInterval,计时器也不会设置为0,因此这个图像显示得太快(旧计时器仍处于活动状态)。
我的js代码可能出现什么问题?
谢谢!
function pauseImage () {
var rest=null;
clearInterval(rest);
rest=setInterval(function() { ...go to the next slide...}, 5000);
};
答案 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循环内的时间间隔,但是我发现这对我有用,并且比之有效。
确保检查间隔变量的范围(在上述情况下为计时器)