9 ответов:
setInterval()возвращает идентификатор интервала, который можно передать вclearInterval():var refreshIntervalId = setInterval(fname, 10000); /* later */ clearInterval(refreshIntervalId);смотрите документы для
setInterval()иclearInterval().
Если вы установите возвращаемое значение
setIntervalдля переменной можно использоватьclearIntervalчтобы остановить его.var myTimer = setInterval(...); clearInterval(myTimer);
вы можете установить новую переменную и увеличить ее на ++ (подсчитайте один) каждый раз, когда она запускается, затем я использую условный оператор для ее завершения:
var intervalId = null; var varCounter = 0; var varName = function(){ if(varCounter <= 10) { varCounter++; /* your code goes here */ } else { clearInterval(intervalId); } }; $(document).ready(function(){ intervalId = setInterval(varName, 10000); });Я надеюсь, что это помогает и это правильно.
ответы выше уже объяснили, как setInterval возвращает дескриптор и как этот дескриптор используется для отмены интервального таймера.
некоторые архитектурные соображения:
пожалуйста, не используйте переменные "scope-less". Самый безопасный способ-использовать атрибут объекта DOM. Самым простым местом будет "документ". Если обновление запускается кнопкой start/stop, вы можете использовать саму кнопку:
<a onclick="start(this);">Start</a> <script> function start(d){ if (d.interval){ clearInterval(d.interval); d.innerHTML='Start'; } else { d.interval=setInterval(function(){ //refresh here },10000); d.innerHTML='Stop'; } } </script>Так как функция определена внутри обработчик щелчка кнопки, вы не должны определить его снова. Таймер может быть возобновлен, если кнопка нажата снова.
@cnu,
вы можете остановить интервал, когда попробуйте запустить код перед просмотром UR console browser (F12) ... попробуйте прокомментировать clearInterval (триггер) - это снова консоль, а не beautifier? : P
Проверьте пример источник:
var trigger = setInterval(function() { if (document.getElementById('sandroalvares') != null) { document.write('<div id="sandroalvares" style="background: yellow; width:200px;">SandroAlvares</div>'); clearInterval(trigger); console.log('Success'); } else { console.log('Trigger!!'); } }, 1000);<div id="sandroalvares" style="background: gold; width:200px;">Author</div>
уже ответил... Но если вам нужен многофункциональный, многоразовый таймер, который также поддерживает несколько задач на разных интервалах, вы можете использовать my TaskTimer (для узла и браузера).
// Timer with 1000ms (1 second) base interval resolution. var timer = new TaskTimer(1000); // Add task(s) based on tick intervals. timer.addTask({ name: 'job1', // unique name of the task tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms) totalRuns: 10, // run 10 times only. (set to 0 for unlimited times) callback: function (task) { // code to be executed on each run console.log(task.name + ' task has run ' + task.currentRuns + ' times.'); } }); // Start the timer timer.start();в вашем случае, когда пользователи нажимают для нарушения обновления данных; вы можете позвонить
timer.pause()затемtimer.resume()если они должны повторно включить.посмотреть здесь.
объявите переменную, чтобы присвоить значение, возвращаемое из setInterval(...) и передайте назначенную переменную в clearInterval ();
например
var timer, intervalInSec = 2; timer = setInterval(func, intervalInSec*1000, 30 ); // third parameter is argument to called function 'func' function func(param){ console.log(param); }/ / везде, где у вас есть доступ к таймер объявленный выше вызов clearInterval
$('.htmlelement').click( function(){ // any event you want clearInterval(timer);// Stops or does the work });
var keepGoing = true; setInterval(function () { if (keepGoing) { //DO YOUR STUFF HERE console.log(i); } //YOU CAN CHANGE 'keepGoing' HERE }, 500);вы также можете остановить интервал, добавив прослушиватель событий, скажем, кнопку с идентификатором "stop-interval":
$('buuton#stop-interval').click(function(){ keepGoing = false; });HTML:
<button id="stop-interval">Stop Interval</button>Примечание: интервал все равно будет выполнен, хотя ничего не произойдет.
почему бы не использовать более простой подход? Добавьте класс!
просто добавьте класс, который говорит интервалу ничего не делать. Например: при наведении курсора.
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</button></p>Я искал этот быстрый и простой подход в течение многих лет, поэтому я публикую несколько версий, чтобы познакомить с ним как можно больше людей.
Comments