Wiederholen mit setInterval
setTimeout() führt eine Funktion einmal aus. setInterval() führt sie immer wieder aus, jedes Mal nach der angegebenen Zahl von Millisekunden, bis du dieses Intervall stoppst. Es gibt ebenfalls eine ID zurück, und clearInterval() stoppt das Intervall. Hier ist der Countdown einer Rakete:
const countdown = document.querySelector("#countdown");
let sekunden = 3;
countdown.textContent = sekunden;
const timer = setInterval(function () {
sekunden--;
if (sekunden === 0) {
clearInterval(timer);
countdown.textContent = "Abheben!";
} else {
countdown.textContent = sekunden;
}
}, 1000);Die Seite zeigt 3, eine Sekunde später 2, dann 1 und dann Abheben! In diesem Moment stoppt clearInterval(timer) das Intervall, und seine Funktion läuft nicht mehr.
Beachte Folgendes:
- Die Funktion läuft zum ersten Mal nach der ersten Sekunde, nicht sofort. Deshalb zeigt das Skript die 3 selbst an, bevor es das Intervall startet.
- Die Variable
sekundensteht außerhalb der Funktion, damit sie sich die Zahl von einem Durchlauf der Funktion zum nächsten merkt, wie beim Klickzähler. Mitlet sekunden = 3;innerhalb der Funktion würde jeder Durchlauf wieder bei 3 beginnen, und die Seite würde für immer 2 zeigen. - Das Intervall kann sich selbst stoppen: Seine Funktion darf
timerverwenden, denn sie läuft erst später, wenntimerschon die ID enthält.
Typische Fehler:
clearInterval()vergessen: Der Countdown läuft weiter bis 0, -1, -2 … solange die Seite geöffnet ist.clearInterval(sekunden): Es braucht die ID des Intervalls, nicht die Zahl, die du herunterzählst.- Ein Intervall zweimal starten, zum Beispiel durch zwei Klicks auf einen Start-Button: Dann laufen zwei Intervalle gleichzeitig, und der Countdown geht doppelt so schnell. Wie bei der Rakete in der vorigen Übung stoppst du zuerst das vorherige mit
clearInterval(timer).
So schreibst du es:
Anweisungen
- 1
Starte im Handler von
startButtonunter seinen beiden Zeilen ein Intervall, das jede Sekunde läuft: Es verringertrestSekundenum 1 und zeigt den Wert inanzeigean. Probiere es aus: Ab 3 zählt der Timer 3, 2, 1, 0, -1 … Er hält noch nicht an. - 2
Halte ihn bei null an. Lege neben
restSekundenmitleteine Variabletimeran und speichere darin das Intervall. WennrestSekundenbei 0 angekommen ist, stoppe das Intervall mitclearInterval(timer)und zeige statt der 0 den TextDie Zeit ist um!an. - 3
Wenn auf
stoppButtongeklickt wird, stoppe den Timer mitclearInterval(timer). Die Anzeige behält die Zahl, die sie zeigt, so siehst du, wie viel Zeit noch übrig war.