Signatur
Beschreibung
Die schreibgeschützte Eigenschaft Animation.playState der Web Animations API gibt an, in welchem Wiedergabezustand sich eine Animation gerade befindet. Sie eignet sich, um Bedienelemente wie Play/Pause-Schalter zu steuern, den Zustand vor einem Methodenaufruf zu prüfen oder den Status zu Debug-Zwecken auszugeben.
Mögliche Werte:
"idle"– Die aktuelle Zeit ist nicht aufgelöst und es steht keine Aufgabe an, z. B. nachcancel()."running"– Die Animation läuft (auch während einplay()noch aussteht)."paused"– Die Animation wurde angehalten, z. B. perpause()."finished"– Die Animation hat eine ihrer Grenzen erreicht (Ende bzw. Anfang bei negativer Wiedergaberate).
Der Wert wird ausschließlich über Methoden wie play(), pause(), finish(), cancel() und reverse() verändert – direktes Zuweisen hat keine Wirkung. Ob ein Zustandswechsel noch aussteht, verrät die separate Eigenschaft Animation.pending.
Rückgabewert
Beispiele
Status im Lebenszyklus einer Animation abfragen
const box = document.querySelector('.box');
const anim = box.animate(
[{ transform: 'translateX(0)' }, { transform: 'translateX(300px)' }],
{ duration: 1000, fill: 'forwards' }
);
console.log(anim.playState); // direkt nach animate()
anim.pause();
console.log(anim.playState);
anim.finish();
console.log(anim.playState);
anim.cancel();
console.log(anim.playState);
Play/Pause-Schalter anhand von playState
const spinner = document.querySelector('#spinner');
const button = document.querySelector('#toggle');
const anim = spinner.animate(
[{ transform: 'rotate(0deg)' }, { transform: 'rotate(360deg)' }],
{ duration: 2000, iterations: Infinity }
);
button.addEventListener('click', () => {
if (anim.playState === 'running') {
anim.pause();
button.textContent = 'Fortsetzen';
} else {
anim.play();
button.textContent = 'Pausieren';
}
});
Alle laufenden Animationen der Seite pausieren
const pauseAllRunning = () => {
const running = document
.getAnimations()
.filter((a) => a.playState === 'running');
running.forEach((a) => a.pause());
return running.length;
};
console.log(`${pauseAllRunning()} Animation(en) pausiert`);
Auf das Ende warten statt playState zu pollen
const fadeOut = async (el) => {
const anim = el.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 400 });
await anim.finished;
console.log(anim.playState);
el.remove();
};
fadeOut(document.querySelector('.toast'));
// Wichtig · Fallstricke
- Schreibgeschützt:
anim.playState = 'paused'bewirkt nichts (im Strict-Mode wirft es einenTypeError). Nutze stattdessenpause(),play()usw. - Kein
"pending"mehr: Ältere Spezifikationsstände und alte Browser-Versionen kannten den Wert"pending". Heute steht dafür die boolesche EigenschaftAnimation.pendingzur Verfügung. - Nicht pollen: Statt
playStatein einer Schleife oder perrequestAnimationFrameabzufragen, besser das Promiseanimation.finishedoder die Eventsfinish/cancelverwenden. - Bei Endlos-Animationen (
iterations: Infinity) wird"finished"nur über einen explizitenfinish()-Aufruf erreicht – der wirft bei positiver Wiedergaberate allerdings einenInvalidStateError. - Auch CSS-Animationen und -Transitions (
CSSAnimation,CSSTransition) überelement.getAnimations()liefernplayState. Nicht verwechseln mit der CSS-Eigenschaftanimation-play-state, die nurrunning/pausedkennt. - Browser-Unterstützung: in Chrome, Edge, Firefox und Safari (ab 13.1) vorhanden; für sehr alte Browser gibt es das Polyfill web-animations-js.