有没有办法来检查一个var是否使用setInterval()?

例如,我正在设置一个间隔

timer = setInterval(fncName, 1000); 

如果我去做

 clearInterval(timer); 

它确实清除了间隔,但有没有办法检查它是否清除了间隔? 我已经尝试了它的价值,而它有一个时间间隔,当它不,但他们都似乎是数字。

没有直接的方法去做你正在寻找的东西。 相反,每次调用clearInterval时,都可以将timer设置为false:

 // Start timer var timer = setInterval(fncName, 1000); // End timer clearInterval(timer); timer = false; 

现在, timer将是假的或在给定的时间有一个值,所以你可以简单地检查

 if (timer) ... 

如果你想把它封装在一个类中:

 function Interval(fn, time) { var timer = false; this.start = function () { if (!this.isRunning()) timer = setInterval(fn, time); }; this.stop = function () { clearInterval(timer); timer = false; }; this.isRunning = function () { return timer !== false; }; } var i = new Interval(fncName, 1000); i.start(); if (i.isRunning()) // ... i.stop(); 

setTimeoutsetInterval的返回值是完全不透明的值。 你不能从中得出任何意义; 他们唯一的用途是传回clearTimeoutclearInterval

没有function来testing一个值是否对应一个活动的超时/间隔,对不起! 如果你想要一个你可以检查状态的计时器,你将不得不创build自己的包装函数来记住设置/清除状态。

您可以重写setInterval方法并添加跟踪您的时间间隔的function。 这是一个非常简单的例子来概述这个想法。 它只能在当前窗口中工作(如果有多个,可以在原型对象的帮助下进行更改),只有在您关注的任何函数都被注册之前,您才能覆盖函数:

 var oldSetInterval = window.setInterval; var oldClearInterval = window.clearInterval; window.setInterval = function(func, time) { var id = oldSetInterval(func, time); window.intervals.push(id); return id; } window.intervals = []; window.clearInterval = function(id) { for(int i = 0; i < window.setInterval.intervals; ++i) if (window.setInterval.intervals[i] == id) { window.setInterval.intervals.splice(i, 1); } oldClearInterval(id); } window.isIntervalRegistered(id) { for(int i = 0; i < window.setInterval.intervals; ++i) if (window.setInterval.intervals[i] == func) return true; return false; } var i = 0; var refreshLoop = setInterval(function(){ i++; }, 250); if (isIntervalRegistered(refrshLoop)) alert('still registered'); else alert('not registered'); clearInterval(refreshLoop); if (isIntervalRegistered(refrshLoop)) alert('still registered'); else alert('not registered'); 

这个问题的解决scheme:创build一个全局计数器,在您的代码中由setInterval执行。 然后在调用setInterval之前,testing计数器是否仍在递增。 如果是这样,你的setInterval仍然是活动的。 如果没有,你很好走。

上面很多复杂的答案,这个方法对我来说工作得很好:

 if (typeof timer == 'undefined') { //timer has been cleared } 

我在下面做了这个,我的问题解决了。 当你清除定时器的时候,你应该把值设置为“false”。

 var timeer=false; ---- ---- if(timeer==false) { starttimer(); } ----- ----- function starttimer() { timeer=setInterval(activefunction, 1000); } function pausetimer() { clearTimeout(timeer); timeer=false; }