Signatur
Beschreibung
TimeEvent.detail ist eine schreibgeschützte Eigenschaft des Interfaces TimeEvent. Solche Ereignisse lösen SVG-Animationselemente (<animate>, <animateTransform>, <animateMotion>, <set>) aus, wenn eine SMIL-Animation startet, endet oder sich wiederholt. Welche Bedeutung der Wert hat, hängt vom Ereignistyp ab.
repeatEvent:detailenthält die Nummer der Wiederholung, die gerade beginnt. Die erste Wiederholung (also der zweite Durchlauf) hat den Wert1.beginEventundendEvent:detailist hier bedeutungslos und in der Regel0.
In der Praxis brauchen Sie die Eigenschaft vor allem, um auf bestimmte Durchläufe einer wiederholten Animation zu reagieren, etwa um einen Zähler anzuzeigen, nach n Durchläufen etwas zu ändern oder Animationen zu synchronisieren. Die Eigenschaft hat keine Parameter, weil sie nur gelesen wird.
Rückgabewert
long). Bei repeatEvent ist das die Nummer der aktuellen Wiederholung (ab 1), bei beginEvent und endEvent in der Regel 0.Beispiele
Wiederholungen einer SVG-Animation mitzählen
// HTML: <svg width="120" height="120"><circle cx="60" cy="60" r="20" fill="tomato">
// <animate id="puls" attributeName="r" values="20;50;20" dur="1s" repeatCount="5" />
// </circle></svg>
const anim = document.getElementById('puls');
anim.addEventListener('repeatEvent', (event) => {
console.log(`Wiederholung Nr. ${event.detail}`);
});
Nach dem dritten Durchlauf die Farbe wechseln (on-Property)
const anim = document.getElementById('puls');
const circle = anim.parentElement;
// Alternative zu addEventListener: on-Property des Animationselements
anim.onrepeat = (event) => {
if (event.detail === 3) {
circle.setAttribute('fill', 'steelblue');
console.log('Farbwechsel nach Durchlauf', event.detail);
}
};
detail bei beginEvent und endEvent
const anim = document.getElementById('puls');
const logDetail = (event) => console.log(event.type, event.detail);
anim.addEventListener('beginEvent', logDetail);
anim.addEventListener('endEvent', (event) => {
logDetail(event);
// Listener aufräumen, wenn die Animation fertig ist
anim.removeEventListener('beginEvent', logDetail);
});
// Wichtig · Fallstricke
- Keine Zählung beim ersten Durchlauf: Für den ersten Durchlauf wird kein
repeatEventausgelöst, sondernbeginEvent. Das ersterepeatEventhat daherdetail === 1. BeirepeatCount="5"kommen also nur vierrepeatEvents an. - Ereignisnamen: Die Typen heißen
beginEvent,endEventundrepeatEvent, die zugehörigen on-Properties dagegenonbegin,onendundonrepeat. - Schreibgeschützt: Wenn Sie
detailetwas zuweisen, passiert nichts. Eigene Werte lassen sich nur über die veraltete MethodeinitTimeEvent()setzen. - Nicht verwechseln mit
UIEvent.detail(z. B. die Anzahl der Klicks) oderCustomEvent.detail(beliebige Nutzdaten). Die Bedeutung ist dort jeweils eine andere. - Kompatibilität:
TimeEventgibt es nur für SMIL-Animationen in SVG. Moderne Desktop- und Mobilbrowser unterstützen es. Bei Ereignissen, die schnell hintereinander kommen, oder bei Tabs im Hintergrund kann es aber sein, dass manche Browser einzelnerepeatEvents zusammenfassen oder auslassen. Verlassen Sie sich deshalb nicht auf lückenlos aufsteigende Werte. Für CSS-Animationen verwenden Sie stattdessenanimationiteration.