Używam setInterval(fname, 10000);
do wywoływania funkcji co 10 sekund w JavaScript. Czy można przestać nazywać go jakimś wydarzeniem?
Chcę, aby użytkownik mógł zatrzymać powtarzające się odświeżanie danych.
Używam setInterval(fname, 10000);
do wywoływania funkcji co 10 sekund w JavaScript. Czy można przestać nazywać go jakimś wydarzeniem?
Chcę, aby użytkownik mógł zatrzymać powtarzające się odświeżanie danych.
setInterval()
zwraca identyfikator interwału, który można przekazać clearInterval()
:
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
Zobacz dokumenty dla setInterval()
i clearInterval()
.
clearInterval
. Użyłemwindow.refreshIntervalId
zamiast zmiennej lokalnej i działa świetnie!$('foo').data('interval', setInterval(fn, 100));
a następnie wyczyścić go za pomocąclearInterval($('foo').data('interval'));
Jestem pewien, że istnieje również sposób inny niż jQuery.Jeśli ustawisz wartość zwracaną
setInterval
zmiennej, możesz jej użyć,clearInterval
aby ją zatrzymać.źródło
Możesz ustawić nową zmienną i zwiększać ją o ++ (policzyć jedną) za każdym razem, gdy się uruchomi, a następnie używam instrukcji warunkowej, aby ją zakończyć:
Mam nadzieję, że to pomaga i jest słuszne.
źródło
clearInterval(varName);
. SpodziewałemclearInterval
się, że nie zadziała po przekazaniu nazwy funkcji, myślałem, że wymaga ID interwału. Przypuszczam, że to może działać tylko wtedy, gdy masz nazwaną funkcję, ponieważ nie możesz przekazać funkcji anonimowej jako zmiennej wewnątrz siebie.$(document).ready(function(){ });
jest jQuery, dlatego nie działa. Powinno to być przynajmniej wspomniane.varName
, która przechowuje nienazwaną funkcję - co? Powinieneś zmienić lub usunąć tę odpowiedź, IMHO.Powyższe odpowiedzi wyjaśniły już, w jaki sposób setInterval zwraca uchwyt i jak ten uchwyt służy do anulowania timera interwału.
Niektóre względy architektoniczne:
Nie używaj zmiennych „bez zakresu”. Najbezpieczniejszym sposobem jest użycie atrybutu obiektu DOM. Najłatwiejszym miejscem byłoby „dokument”. Jeśli odświeżanie jest uruchamiane przyciskiem Start / Stop, możesz użyć samego przycisku:
Ponieważ funkcja jest zdefiniowana w module obsługi kliknięcia przycisku, nie trzeba jej ponownie definiować. Timer można wznowić po ponownym kliknięciu przycisku.
źródło
document
niż nawindow
?Już odpowiedziałem ... Ale jeśli potrzebujesz funkcjonalnego, wielokrotnego użytku timera, który obsługuje również wiele zadań w różnych odstępach czasu, możesz użyć mojego TaskTimer (dla Węzła i przeglądarki).
W twoim przypadku, gdy użytkownicy klikną, aby zakłócić odświeżanie danych; Można również zadzwonić
timer.pause()
wtedytimer.resume()
, jeśli trzeba ponownie włączyć.Zobacz więcej tutaj .
źródło
Za pomocą metody clearInterval () można wyczyścić zestaw liczników czasu za pomocą metody setInterval ().
setInterval zawsze zwraca wartość identyfikatora. Tę wartość można przekazać w funkcji clearInterval (), aby zatrzymać stoper. Oto przykład licznika czasu rozpoczynającego się od 30 i zatrzymującego się, gdy staje się 0.
źródło
@cnu,
Możesz zatrzymać interwał, kiedy spróbujesz uruchomić kod, zanim przejrzysz przeglądarkę konsoli (F12) ... spróbuj skomentować clearInterval (wyzwalacz) to znów konsola, a nie upiększacz? : P
Sprawdź przykład źródło:
źródło
Zadeklaruj zmienną, aby przypisać wartość zwróconą z setInterval (...) i przekaż przypisaną zmienną do clearInterval ();
na przykład
// Gdziekolwiek masz dostęp do timera zadeklarowanego powyżej, zadzwoń clearInterval
źródło
Możesz także zatrzymać interwał, dodając detektor zdarzeń, aby powiedzieć, że mamy przycisk o identyfikatorze „stop-interwał”:
HTML:
Uwaga: interwał będzie nadal wykonywany, ale nic się nie wydarzy.
źródło
W ten sposób użyłem metody clearInterval (), aby zatrzymać stoper po 10 sekundach.
źródło
Użyj setTimeOut, aby zatrzymać interwał po pewnym czasie.
źródło
Myślę, że następujący kod pomoże:
Czy kod był w 100% poprawny ... Więc ... W czym problem? Lub to samouczek ...
źródło
Dlaczego nie zastosować prostszego podejścia? Dodaj klasę!
Po prostu dodaj klasę, która mówi interwałowi, żeby nic nie robił. Na przykład: po najechaniu myszą.
Od lat szukałem tego szybkiego i łatwego podejścia, dlatego publikuję kilka wersji, aby przedstawić jak najwięcej osób.
źródło
this.setInterval(function() { if(!$('#counter').hasClass('pauseInterval')) { //do something } }, 500);
to wszystko, co masz do kodu. Co więcej, czek jest pierwszą rzeczą, którą robisz, więc jest bardzo lekki, gdy się go unosi. Do tego właśnie służy: tymczasowe wstrzymanie funkcji . Jeśli chcesz go zakończyć na czas nieokreślony: oczywiście usuwasz odstęp.