Start · Sprachen · JavaScript · Referenz · AnimationTimeline.currentTime

AnimationTimeline.currentTime

Eigenschaft

Gibt die aktuelle Zeit einer Animations-Zeitleiste zurück: bei <code>DocumentTimeline</code> in Millisekunden, bei Scroll-Zeitleisten als Prozentwert, oder <code>null</code>, wenn sie inaktiv ist.

seit JavaScript Baseline: alle modernen Browser (DocumentTimeline) Kategorie: webapi

Signatur

get AnimationTimeline.currentTime

Beschreibung

Die schreibgeschützte Eigenschaft currentTime der Schnittstelle AnimationTimeline aus dem Web Animations API liefert die aktuelle Zeit der Zeitleiste. Alle Animationen, die an diese Zeitleiste gebunden sind, berechnen ihren Fortschritt aus diesem Wert. Wenn die Zeitleiste inaktiv ist, ist der Wert null.

Bei der Standard-Zeitleiste document.timeline (eine DocumentTimeline) ist der Wert eine Zahl in Millisekunden seit dem Time Origin des Dokuments, also sehr nah an performance.now(). Innerhalb eines Frames bleibt der Wert jedoch gleich: Er wird einmal pro Frame aktualisiert und nicht bei jedem Zugriff.

Bei scrollgesteuerten Zeitleisten (ScrollTimeline, ViewTimeline) ist der Wert kein Zeitwert, sondern ein CSSUnitValue in Prozent (z. B. CSS.percent(42)). Er gibt an, wie weit gescrollt wurde bzw. wie weit ein Element den sichtbaren Bereich durchquert hat.

Typische Einsatzfälle: mehrere Animationen genau gleichzeitig starten (über animation.startTime = document.timeline.currentTime), den Scrollfortschritt auslesen, ohne einen scroll-Listener zu brauchen, oder eigene Zeitmessungen auf die Zeitbasis der Animationen abstimmen.

Rückgabewert

Typ
number | CSSNumericValue | null
Beschreibung
DocumentTimeline: Millisekunden als number. ScrollTimeline/ViewTimeline: CSSUnitValue mit der Einheit percent. Bei inaktiver Zeitleiste: null.

Beispiele

Aktuelle Dokument-Zeit auslesen

const t = document.timeline.currentTime;
console.log(`Zeitleiste: ${t.toFixed(1)} ms`);
console.log(`performance.now(): ${performance.now().toFixed(1)} ms`);
Zeitleiste: 1532.4 ms performance.now(): 1533.1 ms (Werte variieren)

Mehrere Animationen synchron starten

const boxes = document.querySelectorAll('.box');
const start = document.timeline.currentTime;

boxes.forEach((box, i) => {
  const anim = box.animate(
    [{ transform: 'translateX(0)' }, { transform: 'translateX(200px)' }],
    { duration: 1000, delay: i * 100, fill: 'forwards' }
  );
  // Gemeinsame Startzeit: alle laufen exakt im selben Takt
  anim.startTime = start;
});

Scrollfortschritt über ScrollTimeline lesen

if ('ScrollTimeline' in window) {
  const timeline = new ScrollTimeline({
    source: document.documentElement,
    axis: 'block'
  });

  const log = () => {
    const ct = timeline.currentTime; // CSSUnitValue oder null
    if (ct !== null) {
      console.log(`Gescrollt: ${ct.value.toFixed(0)} ${ct.unit}`);
    }
    requestAnimationFrame(log);
  };
  requestAnimationFrame(log);
} else {
  console.log('ScrollTimeline wird nicht unterstützt');
}
Gescrollt: 37 percent

Auf inaktive Zeitleiste prüfen

const describe = (timeline) => {
  const ct = timeline.currentTime;
  if (ct === null) return 'inaktiv';
  return typeof ct === 'number' ? `${Math.round(ct)} ms` : ct.toString();
};

console.log(describe(document.timeline));
z. B. "2047 ms"

// Wichtig · Fallstricke

  • Schreibgeschützt: Wenn man currentTime etwas zuweist, wird das ignoriert (im Strict Mode wirft es einen TypeError). Um eine einzelne Animation zu verschieben, setzt man stattdessen Animation.currentTime oder Animation.startTime.
  • Immer mit null rechnen: Eine Zeitleiste kann inaktiv sein, zum Beispiel in einem Dokument ohne Browsing-Kontext oder bei einer ScrollTimeline, deren Container nicht scrollbar ist. Rechnet man ohne Prüfung damit, entstehen NaN-Werte.
  • Typ hängt von der Zeitleiste ab: Scroll-Zeitleisten liefern einen CSSUnitValue und keine Zahl. Arithmetik wie ct + 10 funktioniert dann nicht; man nutzt ct.value oder ct.to('percent').
  • Ungenauigkeit durch Sicherheitsmaßnahmen: Browser runden oder verrauschen den Wert (wie performance.now()), um Timing-Angriffe zu erschweren. Deshalb eignet er sich nicht für hochpräzise Messungen.
  • Kompatibilität: document.timeline.currentTime funktioniert in allen modernen Browsern. ScrollTimeline und ViewTimeline gibt es in Chromium ab Version 115; in Safari und Firefox ist die Unterstützung neu bzw. noch hinter Flags. Deshalb vorher mit 'ScrollTimeline' in window prüfen.