Staram się, aby strona przechodziła do strony startowej po np. 10 sekund bezczynności (użytkownik nigdzie nie klikał). Do reszty używam jQuery, ale set / clear w mojej funkcji testowej to czysty javascript.
W mojej frustracji skończyło się na czymś takim, jak ta funkcja, którą miałem nadzieję, że mogę wywołać każde kliknięcie na stronie. Timer uruchamia się prawidłowo, ale nie jest resetowany jednym kliknięciem. Jeśli funkcja zostanie wywołana 5 razy w ciągu pierwszych 10 sekund, pojawi się 5 alertów ... no clearTimeout ...
function endAndStartTimer() {
window.clearTimeout(timer);
var timer;
//var millisecBeforeRedirect = 10000;
timer = window.setTimeout(function(){alert('Hello!');},10000);
}
Ktoś ma jakieś linie kodu, które załatwią sprawę? - po każdym kliknięciu zatrzymaj, zresetuj i uruchom stoper. - Gdy zegar uderza np. 10 sekund zrób coś.
źródło
Problem polega na tym, że
timer
zmienna jest lokalna, a jej wartość jest tracona po każdym wywołaniu funkcji.Musisz ją utrwalić, możesz umieścić ją poza funkcją lub jeśli nie chcesz ujawniać zmiennej jako globalnej, możesz ją przechowywać w domknięciu , np:
źródło
Dzieje się tak, ponieważ timer jest lokalną zmienną twojej funkcji.
Spróbuj utworzyć go poza funkcją.
źródło
Sposób wykorzystania tego w reakcji:
Przydatne, jeśli chcesz na przykład wywołać interfejs API dopiero po tym, jak użytkownik przestanie pisać. Funkcja userTimeout może być powiązana przez onKeyUp z wejściem.
źródło
Nie jestem pewien, czy to narusza jakąś dobrą praktykę kodowania, ale zwykle wychodzę z tego:
Zapobiega to konieczności deklarowania licznika czasu poza funkcją.
EDYCJA: to również nie deklaruje nowej zmiennej przy każdym wywołaniu, ale zawsze przetwarza to samo.
Mam nadzieję że to pomoże.
źródło
To działa dobrze. To menedżer, którego stworzyłem do obsługi imprez typu hold. Ma wydarzenia do wstrzymania i kiedy odpuszczasz.
Parametr elementu to ten, który trzymasz. Parametr func jest uruchamiany, gdy utrzymuje się przez liczbę milisekund określoną przez parametr hold. Parametr clearfunc jest opcjonalny i jeśli zostanie podany, zostanie uruchomiony, jeśli użytkownik puści element lub go opuści. Możesz też obejść ten problem, aby uzyskać żądane funkcje. Cieszyć się! :)
źródło
Praktyczny przykład Używanie Jquery do rozwijanego menu! Po najechaniu kursorem na #IconLoggedinUxExternal wyświetla div # ExternalMenuLogin i ustawia limit czasu, aby ukryć div # ExternalMenuLogin
Po najechaniu kursorem na div # ExternalMenuLogin anuluje limit czasu. Po wyjechaniu kursorem myszy na div # ExternalMenuLogin ustawia limit czasu.
Chodzi o to, aby zawsze wywołać clearTimeout przed ustawieniem limitu czasu, aby uniknąć podwójnych wywołań
źródło