Signatur
Beschreibung
Das Ereignis beginEvent gehört zur Schnittstelle SVGAnimationElement. Diese Schnittstelle ist die Grundlage aller SMIL-Animationselemente in SVG: <animate>, <animateMotion>, <animateTransform> und <set>. Das Ereignis tritt jedes Mal auf, wenn ein aktives Intervall der Animation startet. Das passiert beim ersten Start, bei jedem Neustart (z. B. durch ein weiteres begin-Signal oder durch beginElement()) und bei Animationen mit mehreren Startzeiten in der Liste des begin-Attributs.
Einen Handler registrieren Sie mit addEventListener("beginEvent", …) oder über die Eigenschaft onbegin. Im SVG-Markup geht das auch mit dem Attribut onbegin. Das übergebene Objekt ist ein TimeEvent. Es steigt nicht auf (bubbles: false) und lässt sich nicht abbrechen.
Typische Einsatzfälle: JavaScript-Logik mit dem Start einer deklarativen Animation abstimmen (Ton abspielen, Zustand in der Oberfläche setzen, Analyse-Ereignis senden) oder weitere Animationen und Abläufe verketten, die sich über SMIL-Syntax wie begin="anim1.begin" nicht abbilden lassen.
Innerhalb von SMIL heißt dasselbe Ereignis nur begin, z. B. begin="fadeIn.begin+0.5s". In JavaScript lautet der Ereignisname dagegen beginEvent.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Ereignisname, genau "beginEvent". |
|
| $handler Pflicht | (event: TimeEvent) => void | Callback, das ein TimeEvent erhält. Wichtige Eigenschaften: event.target (das Animationselement), event.detail (in der Regel 0) und event.view. |
|
| $options | boolean | AddEventListenerOptions | false | Übliche Optionen von addEventListener, z. B. { once: true } oder { signal }. |
Beispiele
Start einer Animation mit addEventListener erkennen
// HTML: <svg><circle r="20" cx="50" cy="50"><animate id="move" attributeName="cx" from="50" to="250" dur="2s" begin="click" /></circle></svg>
const anim = document.getElementById('move');
anim.addEventListener('beginEvent', (event) => {
console.log('Animation gestartet:', event.target.id);
console.log('Startzeit (s):', anim.getStartTime());
});
on-Property onbegin statt addEventListener
const anim = document.querySelector('animateTransform');
// Nur ein Handler pro Element möglich – eine neue Zuweisung überschreibt den alten
anim.onbegin = () => {
document.body.classList.add('is-animating');
};
// Handler wieder entfernen
// anim.onbegin = null;
Handler nach dem ersten Start entfernen und Animation per Code starten
const anim = document.getElementById('pulse');
let starts = 0;
const onBegin = () => {
starts += 1;
console.log(`Start Nr. ${starts}`);
if (starts === 3) {
anim.removeEventListener('beginEvent', onBegin);
console.log('Listener entfernt');
}
};
anim.addEventListener('beginEvent', onBegin);
// Animation dreimal manuell auslösen (benötigt begin="indefinite" oder restart="always")
const runs = [0, 1500, 3000];
runs.forEach((ms) => setTimeout(() => anim.beginElement(), ms));
Auf den Start mit einem Promise warten
const waitForBegin = (el) =>
new Promise((resolve) => el.addEventListener('beginEvent', resolve, { once: true }));
const anim = document.getElementById('fade');
const run = async () => {
const ev = await waitForBegin(anim);
console.log('Los geht’s bei', ev.target.getCurrentTime().toFixed(2), 's');
};
run();
// Wichtig · Fallstricke
- Ereignisname: In JavaScript heißt es
beginEvent, nichtbegin. MitaddEventListener('begin', …)wird der Handler nie aufgerufen. Den Namenbegingibt es nur in der SMIL-Syntax des Attributsbegin(z. B.anim.begin). - Kein Aufsteigen: Das Ereignis steigt nicht auf. Ein Listener am
<svg>-Wurzelelement bekommt es nur in der Capture-Phase mit ({ capture: true }). - Mehrfaches Auslösen: Jeder Neustart des aktiven Intervalls löst das Ereignis erneut aus. Wiederholungen durch
repeatCounttun das nicht, dafür gibt esrepeatEvent. Ob ein Neustart überhaupt möglich ist, steuert das Attributrestart. - Startzeit in der Vergangenheit: Liegt die Startzeit schon beim Laden der Seite zurück (z. B.
begin=\"0s\"), kann das Ereignis feuern, bevor Ihr Skript den Listener registriert. Registrieren Sie den Listener früh oder verwenden Siebegin=\"indefinite\"zusammen mitbeginElement(). - Kompatibilität: SMIL-Animationen und
beginEventwerden in allen aktuellen Browsern unterstützt (Chrome, Edge, Firefox, Safari). Der Internet Explorer und der alte Edge (EdgeHTML) unterstützen SMIL nicht. CSS-Animationen und die Web Animations API lösen dieses Ereignis nicht aus. Dort sindanimationstartbzw.Animation.readydas Gegenstück.