-
Plug-in für eine Flip-Uhr mit fallenden Ziffern
-
Verwendbar für Countdown, Uhr usw.
-
Keine Abhängigkeiten, responsiv/mobil, schnelle Animationen
-
Synchronisierung mit der Serverzeit
-
Mehrfache Änderungen pro Sekunde und Überlappungen möglich
-
Timer-Algorithmus korrigiert automatisch den Drift von
JS setInterval
4 Kommentare
Verwendet intern eine sogenannte Tick-Engine: https://github.com/pqina/tick/
Eine Bibliothek, die Flip-, digitale Punkt-, Zahlenanimations- und Linien- (gerade, Kreis) sowie Boom- (mit Ton) Darstellungen unterstützt
Ich fand es faszinierend, dass
setTimeout-Drift automatisch korrigiert wird, und habe mich gefragt, an welcher Stelle das passiert. Wie sich zeigt, wird das im Teiltimer.jsder Tick-Engine behandelt. Vereinfacht gesagt wird zu Beginn, wenn die Zeit zu laufen beginnt, mitDate.now() + intervaldie genaue Epoch-Zeit des nächsten Ticks (tickExpectedTime) berechnet. Wenn dann mitsetTimeout()der nächste Tick kommt, wird der aktuelle Wert vonDate.now()(currentTime) mittickExpectedTimeverglichen, um zu bestimmen, wie groß die Abweichung ist.https://github.com/pqina/tick/blob/master/src/core/js/timer.js
Wie ich gerade sehe, gibt es auch eine einfache Korrektur für die Synchronisierung der Serverzeit. Dabei wird die Zeitdifferenz zwischen dem Senden und dem Empfangen der Anfrage geprüft, und die Hälfte dieser Differenz (= ungefähr die Zeit, die die Übertragung vom Server zum Client benötigt) zur vom Server geholten Zeit addiert. Das dient dazu, die Uhrzeit möglichst genau zu synchronisieren. Allerdings ist der Zeitwert im HTTP-Header nur auf Sekundenebene, daher scheint es unwahrscheinlich, dass es in den meisten Fällen große Abweichungen gibt …
Wie ich erst später erfahren habe, nennt man eine solche Zeitsynchronisationsmethode, bei der zu dem vom Server abgerufenen Zeitwert die Hälfte der Round-Trip-Time (RTT) addiert wird, den „Cristian-Algorithmus“ (Cristian's algorithm).
https://en.wikipedia.org/wiki/Cristian%27s_algorithm
https://www.geeksforgeeks.org/cristians-algorithm/