如何清除函数内的setInterval?

Osc*_*son 162 javascript settimeout dom-events

通常,我将间隔设置为变量然后清除它,var the_int = setInterval(); clearInterval(the_int);但为了我的代码工作我把它放在一个匿名函数:

function intervalTrigger() {
  setInterval(function() {
    if (timedCount >= markers.length) {
      timedCount = 0;
    }

    google.maps.event.trigger(markers[timedCount], "click");
    timedCount++;
  }, 5000);
};

intervalTrigger();
Run Code Online (Sandbox Code Playgroud)

我该如何清除这个?我试了一下并试图var test = intervalTrigger(); clearInterval(test);确定,但那没用.

基本上,我需要这个来点击我的谷歌地图后停止触发,例如

google.maps.event.addListener(map, "click", function() {
  //stop timer
});
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 260

setInterval方法返回一个句柄,您可以使用该句柄来清除间隔.如果希望函数返回它,只需返回方法调用的结果:

function intervalTrigger() {
  return window.setInterval( function() {
    if (timedCount >= markers.length) {
       timedCount = 0;
    }
    google.maps.event.trigger(markers[timedCount], "click");
    timedCount++;
  }, 5000 );
};
var id = intervalTrigger();
Run Code Online (Sandbox Code Playgroud)

然后清除间隔:

window.clearInterval(id);
Run Code Online (Sandbox Code Playgroud)

  • 注意:您不需要引用全局范围。`setInterval` 和 `window.setInterval` 一样有效。 (3认同)
  • 明确表达通常是一个好习惯。一些 linter 会抱怨全局范围的隐式使用,而“window.”则可以。 (2认同)

Mar*_*lea 10

// Initiate set interval and assign it to intervalListener
var intervalListener = self.setInterval(function () {someProcess()}, 1000);
function someProcess() {
  console.log('someProcess() has been called');
  // If some condition is true clear the interval
  if (stopIntervalIsTrue) {
    window.clearInterval(intervalListener);
  }
}
Run Code Online (Sandbox Code Playgroud)