Start · Sprachen · JavaScript · Referenz · AnimationTimeline

AnimationTimeline

Schnittstelle

Abstrakte Basisschnittstelle der Web Animations API für Zeitleisten, über die <code>currentTime</code> einer Animation fortschreitet.

seit JavaScript Baseline: alle modernen Browser (currentTime seit Kategorie: webapi

Signatur

interface AnimationTimeline

Beschreibung

AnimationTimeline ist die abstrakte Basisschnittstelle für alle Zeitleisten der Web Animations API. Eine Zeitleiste stellt die Zeitquelle bereit, an die eine Animation gebunden ist. Aus ihrem Wert berechnet der Browser, welchen Fortschritt die Animation gerade hat.

Du kannst die Schnittstelle nicht direkt instanziieren. In der Praxis arbeitest du mit ihren Unterklassen:

  • DocumentTimeline: eine zeitbasierte Zeitleiste. Die Standard-Zeitleiste jedes Dokuments steht über document.timeline bereit.
  • ScrollTimeline: Der Fortschritt folgt der Scroll-Position eines Scroll-Containers (Scroll-Driven Animations).
  • ViewTimeline: Der Fortschritt folgt der Sichtbarkeit eines Elements in seinem Scroll-Container.

Die Schnittstelle definiert die schreibgeschützte Eigenschaft currentTime. Bei einer DocumentTimeline ist das eine Zahl in Millisekunden, bei Scroll-Zeitleisten ein CSSUnitValue in Prozent. Ist die Zeitleiste inaktiv, ist der Wert null. Neuere Browser haben außerdem duration. Diese Eigenschaft ist bei Scroll-Zeitleisten 100% und bei Dokument-Zeitleisten null.

Du brauchst AnimationTimeline vor allem, wenn du Animationen mit einer bestimmten Zeitquelle synchronisieren willst, wenn du Zeitpunkte für Animation.startTime berechnest oder wenn du Code schreibst, der mit beliebigen Zeitleisten-Typen umgehen soll.

Rückgabewert

Typ
AnimationTimeline
Beschreibung
Du bekommst keinen Konstruktor, sondern Instanzen der Unterklassen. Beispiele sind document.timeline, animation.timeline, new DocumentTimeline() und new ScrollTimeline().

Beispiele

Aktuelle Zeit der Dokument-Zeitleiste lesen

const timeline = document.timeline;

console.log(timeline instanceof AnimationTimeline); // true
console.log(typeof timeline.currentTime);           // "number" (ms seit Laden des Dokuments)
true number

Mehrere Animationen synchron starten

const boxes = document.querySelectorAll('.box');
const start = document.timeline.currentTime + 500; // in 500 ms

boxes.forEach((box) => {
  const anim = box.animate(
    [{ transform: 'translateX(0)' }, { transform: 'translateX(200px)' }],
    { duration: 1000, fill: 'forwards' }
  );
  // Gemeinsamer Startzeitpunkt auf derselben Zeitleiste
  anim.startTime = start;
});

Scroll-gebundene Animation mit ScrollTimeline

const progressBar = document.querySelector('#progress');

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

  progressBar.animate(
    [{ transform: 'scaleX(0)' }, { transform: 'scaleX(1)' }],
    { timeline, fill: 'both' }
  );

  window.addEventListener('scroll', () => {
    // CSSUnitValue in Prozent, z. B. "42.5%"
    console.log(String(timeline.currentTime));
  }, { passive: true });
}
0% 12.3% ...

Zeitleisten-Typ generisch auswerten

const describeTimeline = (timeline) => {
  const t = timeline.currentTime;
  if (t === null) return 'inaktiv';
  return typeof t === 'number' ? `${t.toFixed(0)} ms` : `${t.value.toFixed(1)} ${t.unit}`;
};

const anim = document.body.animate([{ opacity: 1 }, { opacity: 0.5 }], 1000);
console.log(describeTimeline(anim.timeline));
z. B. "1234 ms"

// Wichtig · Fallstricke

  • AnimationTimeline ist abstrakt. new AnimationTimeline() wirft einen TypeError.
  • currentTime kann null sein, zum Beispiel wenn die Zeitleiste inaktiv ist, ein Scroll-Container nicht scrollbar ist oder das Dokument noch nicht aktiv ist. Prüfe das immer vor Berechnungen.
  • Der Typ von currentTime hängt von der Zeitleiste ab: number in Millisekunden bei DocumentTimeline, CSSNumericValue in Prozent bei ScrollTimeline und ViewTimeline. Code, der eine Zahl erwartet, geht bei Scroll-Zeitleisten kaputt.
  • Browser-Unterstützung: DocumentTimeline und currentTime gibt es in allen modernen Browsern. ScrollTimeline und ViewTimeline gibt es in Chromium seit Version 115. In Firefox stehen sie nur hinter einem Flag, in Safari noch nicht oder nur eingeschränkt. Prüfe die Unterstützung per Feature-Detection ('ScrollTimeline' in window).
  • Die Zeitauflösung von currentTime kann aus Datenschutzgründen (Schutz vor Timing-Angriffen) vergröbert sein, ähnlich wie bei performance.now().