함수 내에서이 setInterval을 지우려면 어떻게해야합니까?


163

일반적으로 간격을 변수로 설정 한 다음처럼 지우지 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
});

답변:


263

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

2
참고 : 전역 범위를 참조 할 필요는 없습니다. setInterval뿐만 아니라 작동합니다 window.setInterval.
Samy Bencherif

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


-4

내가 생각할 수있는 가장 간단한 방법은 클래스를 추가하는 것입니다.

모든 요소에 클래스를 추가하고 간격이 있는지 확인하십시오. 이것은 다른 어떤 방법보다 더 신뢰할 수 있고 사용자 정의 가능하며 언어가 다릅니다.

var i = 0;
this.setInterval(function() {
  if(!$('#counter').hasClass('pauseInterval')) { //only run if it hasn't got this class 'pauseInterval'
    console.log('Counting...');
    $('#counter').html(i++); //just for explaining and showing
  } else {
    console.log('Stopped counting');
  }
}, 500);

/* In this example, I'm adding a class on mouseover and remove it again on mouseleave. You can of course do pretty much whatever you like */
$('#counter').hover(function() { //mouse enter
    $(this).addClass('pauseInterval');
  },function() { //mouse leave
    $(this).removeClass('pauseInterval');
  }
);

/* Other example */
$('#pauseInterval').click(function() {
  $('#counter').toggleClass('pauseInterval');
});
body {
  background-color: #eee;
  font-family: Calibri, Arial, sans-serif;
}
#counter {
  width: 50%;
  background: #ddd;
  border: 2px solid #009afd;
  border-radius: 5px;
  padding: 5px;
  text-align: center;
  transition: .3s;
  margin: 0 auto;
}
#counter.pauseInterval {
  border-color: red;  
}
<!-- you'll need jQuery for this. If you really want a vanilla version, ask -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<p id="counter">&nbsp;</p>
<button id="pauseInterval">Pause/unpause</button></p>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.