如何在我的功能中停止时间间隔?

时间:2013-05-06 18:51:03

标签: javascript intervals

我有这个功能:

function timedFunction(functionString,timeoutPeriod) {
setTimeout(functionString+"timedFunction(\""+functionString+"\","+timeoutPeriod+");",timeoutPeriod);}

这个功能我打电话:

 timedFunction("startStopky();",1000);

startStopky();是我想要在指定的时间间隔内重复运行的函数。一切都很好,但如果我想停止这个间隔,我必须停止如下:

for (var i = 1; i < 99999; i++) {
            window.clearInterval(i);
        }

不幸的是,这将停止所有间隔,我想停止一个特定的。我该怎么办?

4 个答案:

答案 0 :(得分:3)

而不是对timedFunction进行递归调用,只需执行:

var intervalId = setInterval(startStopky, 1000);

并清除它只是:

clearInterval(intervalId);

答案 1 :(得分:2)

setTimeout函数返回与clearTimeout一起使用的超时ID,以删除该超时。对于间隔也是如此,但在这种情况下,它是setIntervalclearInterval组合。

E.g:

var t = setTimeout(yourFunction, 1000);
clearTimeout(t);

var i = setInterval(yourFunction2, 500);
clearInterval(i);

答案 2 :(得分:1)

您有超时,但您正在清除间隔。 clearInterval清除间隔,而不是超时。

您需要window.clearTimeout(timeoutId)

如果要停止单个,请使用该时间间隔的processId。

window.clearTimeout("13");

答案 3 :(得分:0)

你真的不应该使用字符串来执行此操作:

function timedFunction(fn, interval) {
  var timerHandle;

  function runIt() {
    fn();
    timerHandle.id = setTimeout(runIt, interval);
  }

  return timerHandle = { id: setTimeout(runIt, interval) };
}

然后你可以这样称呼它:

var handle = timedFunction(startStopky, 1000);

停止这个过程:

clearTimeout(handle.id);