JS setTimeout und setInterval – Timer und Polling

setTimeout() und setInterval() werden für die verzögerte Ausführung von Funktionen, einfache Timer oder wiederholte Aktionen eingesetzt. setTimeout() führt eine Aktion einmalig nach einer bestimmten Verzögerung aus, setInterval() wiederholt einer Funktion in regelmäßigen Abständen.

Animieren mit setTimeout: laufende Monster

Animations-Methoden in Javascript

Die Grundidee der Animation mit Javascript: Mach ein Element Bild für Bild in schneller Folge sichtbar oder unsichtbar, bewege es oder verändere sein Aussehen nach und nach. Dabei entsteht eine Sequenz von Einzelbildern oder Frames, die schnell genug aufeinander folgen, dass die Bewegung fließend und natürlich wirkt.

Ein Lemming läuft

Lemmings, das Computerspiel des Entwicklers DMA Design (1991)

setTimeout

Javascript window.setTimeout(action, timeout) gibt an, dass Anweisungen nach einer bestimmten Zeit timeout (angegeben in Millisekunden) ausgeführt werden, und wird für einfache verzögerte Aktionen eingesetzt.

setTimeout(() => {
	console.log("Diese Nachricht erscheint nach 3 Sekunden");
	document.querySelector("#ping").innerHTML = "🎉"
}, 3000);
     ▲
     |
     └--- Timeout in Millisekunden

Javascript setTimeout() führt die Anweisungen exakt einmal aus (und der Timer ist nicht besonders exakt) und dann nie wieder. Um Anweisungen wiederholt durchzuführen, muss das Skript wiederholt aufgerufen werden – z.B. rekursiv oder in einer Schleife. In diesem Beispiel prüft das Skript alle 5 Sekunden, ob neue Nachrichten vorliegen.

function checkForNewMessages() {
	fetch("/api/messages")
		.then(response => response.json())
		.then(data => {
			console.log("Neue Nachrichten:", data);
		})
		.catch(error => console.error("Fehler:", error))
		.finally(() => {
			setTimeout(checkForNewMessages, 5000); // Nach 5 Sekunden erneut abfragen
		});
	}

checkForNewMessages(); // Erster Aufruf

clearTimeout()

Die Funktion setTimeout() gibt einen einfachen Wert zurück – einen Verweis auf den Timeout. Die Referenz auf setTimeout() wird benötigt, um den Timeout abzubrechen und die Ausführung der Anweisungen zu unterbinden.

       Zeit in Millisekunden bis  ──┐
       zum Aufruf der Anweisungen   │
                                    │
          Anweisung oder  ──┐       │
          Callback-Funktion │       │ 
                            ▼       ▼
const ani = setTimeout ( action, timeout );
       ▲
       |
       └--- optionale Referenz, mit der
            setTimeout abgebrochen werden kann

Javascript clearTimeout() cancelt den Aufruf von setTimeout().

window.clearTimeout(ani);

setInterval()

Javascript setInterval(action, delay) wiederholt Anweisungen in einem Interval von delay Millisekunden und eignet sich für wiederkehrende Aktionen in festen Abständen, z. B. Countdown, einfache Animationen und Hintergrundaufgaben.

setInterval(() => {
	console.log("Diese Nachricht erscheint alle 5 Sekunden");
}, 5000);

setInterval() läßt sich mit einer anonymen Funktion aufrufen. Das hält den Scriptcode besser zusammen als var interval = window.setInterval (code, delay) und ersetzt auch eine externe Funktion. Das Beispiel erzeugt einen Countdown mit setInterval().

5
const timerId = setInterval ( function tick() {
   let counter = parseInt(document.getElementById("counter").textContent);
   if (counter < 1) {
      clearInterval(timerId)
   } else 
      document.getElementById("counter").textContent = counter - 1;
}, 1000);

clearInterval() ist das Äquivalent zu clearTimeout(), um den Timer zu speichern und die Aktion abzubrechen.

let intervalId = setInterval(() => {
	console.log("Alle 3 Sekunden!");
}, 3000);

clearInterval(intervalId); // Stoppt den Timer

setTimeout() vs setInterval()

  • setInterval() führt die Anweisungen sofort und dann alle 1000 / 2000 … Millisekunden durch
  • setTimeout() wartet 1000 / 2000 … Millisekunden, führt die Funktion aus (und braucht dafür ein paar Millisekunden) und wartet dann auf den nächsten Timeout. Die Zeitspanne zwischen zwei Frames ist also einen Tick größer als 1000 / 2000 … Millisekunden.

setTimeout(), setInterval(), requestAnimationFrame, Web Animation API

setTimeout() und setInterval() wurden früher für Animationen eingesetzt. requestAnimationFrame kam erst später als Verbesserung hinzu.

Methode Vorteile 🟢 Nachteile 🔴 Anwendung
setTimeout / setInterval Für Timer oder wiederholte Funktionen einfach zu nutzen Nicht synchron mit der Bildwiederholrate, kann zu Rucklern führen Für einfache Verzögerungen oder regelmäßige Updates (z. B. Uhrzeit, Polling)
requestAnimationFrame Synchron mit der Bildschirm-Refresh-Rate (60 FPS), ressourcenschonend, flüssigere Animationen Muss rekursiv aufgerufen werden, nicht für verzögerte Aktionen gedacht Ideal für komplexe, performante Animationen (Canvas, Bewegungseffekte)
Web Animations API (WAAPI) Native Animationen, optimiert für GPU, einfach zu steuern (play, pause, reverse) nicht so flexibel wie requestAnimationFrame Beste Wahl für CSS-ähnliche Animationen, wenn Keyframes ausreichen
Suchen auf mediaevent.de