Как мне понятно, этот метод 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
});
4 ответа:
The
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);
// 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); } }
самый простой способ, который я мог придумать: добавить класс.
просто добавьте класс (на любом элементе) и проверьте внутри интервала, если он есть. Это более надежный, настраиваемый и кросс-язык, чем любой другой способ, я считаю.
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"> </p> <button id="pauseInterval">Pause/unpause</button></p>