Signatur
Beschreibung
Die Eigenschaft animationName des Interfaces CSSAnimation liefert den Wert aus der CSS-Eigenschaft animation-name, also den Bezeichner der @keyframes-Regel, die die Animation steuert. CSSAnimation erweitert Animation: Jede per CSS deklarierte Animation taucht über die Web Animations API als CSSAnimation-Objekt auf.
Nützlich ist das, wenn du laufende Animationen per element.getAnimations() oder document.getAnimations() abfragst und eine bestimmte Animation herausfiltern willst, um sie zu pausieren, zu beschleunigen, zurückzuspulen oder auf ihr Ende (finished) zu warten.
Die Eigenschaft ist schreibgeschützt. Wenn du den Namen ändern willst, musst du die CSS-Eigenschaft animation-name am Element ändern. Der Browser erzeugt dann ein neues CSSAnimation-Objekt.
Rückgabewert
@keyframes-Regel, z. B. "fade-in". Das ist nicht das Gleiche wie Animation.id.Beispiele
Namen aller CSS-Animationen eines Elements ausgeben
// CSS: .box { animation: fade-in 1s, slide 2s infinite; }
const box = document.querySelector('.box');
const names = box.getAnimations()
.filter((anim) => anim instanceof CSSAnimation)
.map((anim) => anim.animationName);
console.log(names);
Bestimmte Animation gezielt pausieren
// CSS: .spinner { animation: spin 1s linear infinite; }
const spinner = document.querySelector('.spinner');
const pauseAnimation = (el, name) => {
const anim = el.getAnimations()
.find((a) => a instanceof CSSAnimation && a.animationName === name);
anim?.pause();
return anim?.playState;
};
console.log(pauseAnimation(spinner, 'spin'));
Auf das Ende einer Einblend-Animation warten
// CSS: .modal.open { animation: modal-in 300ms ease-out; }
const modal = document.querySelector('.modal');
modal.classList.add('open');
const waitForAnimation = async (el, name) => {
const anim = el.getAnimations()
.find((a) => a.animationName === name);
if (anim) await anim.finished;
};
await waitForAnimation(modal, 'modal-in');
console.log('Modal vollständig eingeblendet');
Seitenweit alle Animationen mit einem Namen beschleunigen
document.getAnimations()
.filter((a) => a.animationName === 'pulse')
.forEach((a) => a.updatePlaybackRate(2));
console.log('pulse läuft jetzt doppelt so schnell');
// Wichtig · Fallstricke
- Nur für CSS-Animationen: Animationen, die mit
element.animate()erzeugt wurden, sind normaleAnimation-Objekte ohneanimationName. Der Wert ist dortundefined. CSS-Transitions sindCSSTransition-Objekte und haben stattdessentransitionProperty. Prüfe den Typ bei Bedarf mitinstanceof CSSAnimation. - Schreibgeschützt: Eine Zuweisung wird ignoriert bzw. wirft im Strict Mode einen
TypeError. - Groß-/Kleinschreibung: Bezeichner in
@keyframesunterscheiden Groß- und Kleinbuchstaben. Vergleiche deshalb exakt. getAnimations()liefert nur laufende oder ausstehende Animationen. Mitanimation-name: noneoder nach dem Ende ohnefill-modewird die Animation nicht mehr aufgeführt.- Das
CSSAnimation-Objekt wird ersetzt, sobald sichanimation-nameändert. Referenzen auf das alte Objekt veralten dann. - Browser-Unterstützung: Seit 2020 in allen modernen Browsern vorhanden, nicht im Internet Explorer.