web-dev-qa-db-ja.com

関数内でこのsetIntervalをクリアするにはどうすればよいですか?

通常、間隔を変数に設定してから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();

これをクリアするにはどうすればよいですか?試しにvar test = intervalTrigger(); clearInterval(test);を試してみましたが、うまくいきませんでした。

基本的に、Googleマップがクリックされたときにトリガーを停止するには、これが必要です。

google.maps.event.addListener(map, "click", function() {
  //stop timer
});
161
Oscar Godson

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();

次に、間隔をクリアします。

window.clearInterval(id);
259
Guffa
// 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);
  }
}
10
Marian Zburlea
the_int=window.clearInterval(the_int);
1
Anup