Signatur
Beschreibung
Die Eigenschaft startTime des Animation-Interfaces ist ein Gleitkommawert mit doppelter Genauigkeit. Sie gibt an, zu welchem Zeitpunkt der zugehörigen Zeitleiste (meist document.timeline) die Wiedergabe der Animation beginnt bzw. begonnen hat. Der Wert wird in Millisekunden angegeben und bezieht sich auf timeline.currentTime, nicht auf Date.now() oder die Uhrzeit.
Die Eigenschaft ist les- und schreibbar. Beim Setzen wird die Animation so verschoben, dass ihre aktuelle Zeit (currentTime) sich aus (timeline.currentTime - startTime) * playbackRate ergibt. Damit lassen sich mehrere Animationen exakt synchronisieren: Man übernimmt einfach die startTime einer laufenden Animation für eine neue Animation. Ein Wert in der Zukunft verzögert den Start, ein Wert in der Vergangenheit lässt die Animation „mittendrin“ einsetzen.
Solange eine Animation pausiert, noch im Zustand pending (Start ausstehend) ist oder keine aktive Zeitleiste hat, liefert startTime den Wert null. Wird startTime auf null gesetzt, wird die Animation effektiv angehalten und behält ihre aktuelle Zeit.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | number | null | Beim Setzen: neuer Startzeitpunkt in Millisekunden relativ zur Zeitleiste der Animation. null hebt den Startzeitpunkt auf (Animation hält an und behält currentTime). |
Rückgabewert
null, wenn die Animation pausiert, noch nicht gestartet (pending) oder ohne aktive Zeitleiste ist.Beispiele
Startzeit einer laufenden Animation auslesen
const box = document.querySelector('.box');
const anim = box.animate(
[{ transform: 'translateX(0)' }, { transform: 'translateX(300px)' }],
{ duration: 2000, iterations: Infinity }
);
// Direkt nach animate() ist der Start noch ausstehend
console.log(anim.startTime); // null
await anim.ready;
console.log(typeof anim.startTime, anim.startTime.toFixed(1));
Mehrere Animationen synchron starten
const keyframes = [{ opacity: 0.2 }, { opacity: 1 }];
const options = { duration: 1000, direction: 'alternate', iterations: Infinity };
const first = document.querySelector('#a').animate(keyframes, options);
await first.ready;
// Später hinzugefügtes Element exakt im Takt der ersten Animation laufen lassen
const second = document.querySelector('#b').animate(keyframes, options);
second.startTime = first.startTime;
console.log(second.currentTime === first.currentTime);
Start einer Animation um 500 ms verzögern
const el = document.querySelector('.hinweis');
const anim = el.animate(
[{ transform: 'scale(0)' }, { transform: 'scale(1)' }],
{ duration: 400, fill: 'both' }
);
// Startzeitpunkt in die Zukunft der Dokument-Zeitleiste legen
anim.startTime = document.timeline.currentTime + 500;
console.log(anim.playState);
// Wichtig · Fallstricke
- Bezugssystem:
startTimebezieht sich aufanimation.timeline.currentTime(beidocument.timelineab Laden des Dokuments), nicht auf Unix-Zeit. Werte ausDate.now()sind hier falsch. - null nach animate()/play(): Die Animation ist zunächst
pending; die Startzeit wird erst im nächsten Frame festgelegt. Aufawait animation.readywarten, bevor man sie liest. - Pausierte Animationen haben immer
startTime === null; relevant ist danncurrentTime. - Zum Schutz vor Timing-Angriffen (Fingerprinting) runden Browser den Wert teils auf gröbere Genauigkeit, z. B. Firefox mit
privacy.reduceTimerPrecision. - Bei
ScrollTimeline/ViewTimeline(Scroll-getriebene Animationen) kann der Wert einCSSNumericValuein Prozent statt einer Zahl sein. - Das Setzen von
startTimebeendet einen ausstehendenplay()- oderpause()-Vorgang sofort und löstreadyauf.