Chcę użyć prostego licznika czasu, zaczynając od 30 sekund od uruchomienia funkcji i kończąc na 0. Żadnych milisekund. Jak można to zakodować?
jquery
timer
counter
setinterval
clearinterval
Mikrofon
źródło
źródło
Jakiś czas temu napisałem ten skrypt:
Stosowanie:
źródło
myCounter.stop();
Jak dotąd odpowiedzi wydają się polegać na natychmiastowym uruchomieniu kodu. Jeśli ustawisz licznik czasu na 1000 ms, zamiast tego będzie to około 1008.
Oto jak powinieneś to zrobić:
Aby skorzystać, zadzwoń:
źródło
Oto kolejny, jeśli ktoś potrzebuje go na minuty i sekundy:
źródło
setTimeout(Decrement, 1000)
jest preferowane. stackoverflow.com/questions/6232574/…źródło
Math.floor
, nieMath.round
Właśnie zmodyfikowana odpowiedź @ ClickUpvote :
Możesz użyć IIFE (natychmiastowo wywoływanego wyrażenia funkcyjnego) i rekurencji, aby było to nieco łatwiejsze:
Pokaż fragment kodu
źródło
Rozszerzenie po zaakceptowanej odpowiedzi, uśpienie urządzenia itp. Może opóźnić działanie timera. Możesz uzyskać prawdziwy czas, kosztem niewielkiej obróbki. To da prawdziwy czas.
źródło
Możesz wykonać następujące czynności z czystym JS. Wystarczy podać funkcji liczbę sekund, a ona zajmie się resztą.
źródło
Na podstawie rozwiązania przedstawionego przez @Layton Everson stworzyłem licznik godzin, minut i sekund:
źródło
źródło
Moje rozwiązanie działa z formatami daty i godziny MySQL i zapewnia funkcję zwrotną. po skompletowaniu. Zastrzeżenie: działa tylko z minutami i sekundami, ponieważ tego potrzebowałem.
źródło
Ze względu na wydajność możemy teraz bezpiecznie używać requestAnimationFrame do szybkiego zapętlania zamiast setInterval / setTimeout.
Podczas korzystania z setInterval / setTimeout, jeśli zadanie pętli zajmuje więcej czasu niż interwał, przeglądarka po prostu przedłuży pętlę interwału, aby kontynuować pełne renderowanie. To stwarza problemy. Po minutach przeciążenia setInterval / setTimeout może to spowodować zawieszenie karty, przeglądarki lub całego komputera.
Urządzenia internetowe mają szeroki zakres wydajności, więc niemożliwe jest zaprogramowanie na stałe ustalonego przedziału czasu w milisekundach!
Za pomocą obiektu Date można porównać początkową epokę dat i bieżącą. Jest to o wiele szybsze niż wszystko inne, przeglądarka zajmie się wszystkim ze stałą prędkością 60 klatek na sekundę ( 1000/60 = 16,66 ms na klatkę ) - ćwierć mrugnięcia okiem - i jeśli zadanie w pętli wymaga więcej , przeglądarka upuści kilka przemalowań.
Pozwala to na zachowanie marginesu przed naszymi oczami ( człowiek = 24 kl./s => 1000/24 = 41,66 ms na klatkę = płynna animacja!)
https://caniuse.com/#search=requestAnimationFrame
źródło