Signatur
Beschreibung
animVal gehört zur Schnittstelle SVGAnimatedNumber. Diese kapselt numerische SVG-Attribute wie offset eines <stop>-Elements, pathLength eines Geometrie-Elements oder k1–k4 von <feComposite>. Jedes dieser Attribute hat zwei Werte: den Basiswert (baseVal), der dem Attribut im Markup entspricht, und den animierten Wert (animVal), also den Wert, der im Moment tatsächlich gilt.
Läuft auf dem Attribut eine deklarative SMIL-Animation (<animate>, <set>), gibt animVal den aktuellen Zwischenwert der Animation zurück. Ohne aktive Animation stimmen animVal und baseVal überein.
Nutze animVal, wenn du den momentan sichtbaren Zustand auslesen willst, etwa zur Synchronisation mit JavaScript-Logik, zum Debugging von Animationen oder für Messungen. Willst du den Wert ändern, schreibst du immer in baseVal oder nutzt setAttribute(). animVal ist schreibgeschützt.
Rückgabewert
offset="50%" werden dabei in Bruchwerte umgerechnet (0.5).Beispiele
Offset eines Farbverlauf-Stopps auslesen
// <svg><linearGradient id="g"><stop id="s1" offset="50%" stop-color="red"/></linearGradient></svg>
const stop = document.getElementById('s1');
console.log(stop.offset.baseVal); // Wert aus dem Markup
console.log(stop.offset.animVal); // aktuell gültiger Wert
Laufende SMIL-Animation beobachten
// <stop id="s2" offset="0" stop-color="blue">
// <animate attributeName="offset" from="0" to="1" dur="4s" repeatCount="indefinite"/>
// </stop>
const stop = document.getElementById('s2');
const log = () => {
const { baseVal, animVal } = stop.offset;
console.log(`Basis: ${baseVal}, animiert: ${animVal.toFixed(2)}`);
};
const timer = setInterval(log, 1000);
setTimeout(() => clearInterval(timer), 4000);
animVal ist schreibgeschützt – Änderung über baseVal
'use strict';
const path = document.querySelector('path');
try {
path.pathLength.animVal = 100; // TypeError im Strict Mode
} catch (err) {
console.log(err instanceof TypeError);
}
// Richtig: Basiswert setzen
path.pathLength.baseVal = 100;
console.log(path.getAttribute('pathLength'), path.pathLength.animVal);
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung an
animValwird außerhalb des Strict Mode stillschweigend ignoriert. Im Strict Mode, also auch in ES-Modulen, löst sie einenTypeErroraus. Ändere Werte daher überbaseValodersetAttribute(). - Nur SMIL zählt:
animValberücksichtigt nur SMIL-Animationen (<animate>,<set>). CSS-Animationen, CSS-Transitions und die Web Animations API ändernanimValin der Regel nicht. Für solche Werte istgetComputedStyle()der richtige Weg, sofern es sich um eine CSS-Eigenschaft handelt. - Ist das Attribut nicht gesetzt, liefert
animValden Standardwert laut Spezifikation, meist0. Ungültige Werte führen ebenfalls zum Standardwert. - Einige Filterattribute mit zwei Zahlen, etwa
stdDeviationoderbaseFrequency, werden auf zweiSVGAnimatedNumber-Eigenschaften aufgeteilt (stdDeviationX/stdDeviationY). Listen wievaluesvon<feColorMatrix>nutzen dagegenSVGAnimatedNumberList. - Kompatibilität: wird von allen modernen Browsern unterstützt. Wie genau
animValwährend einer SMIL-Animation aktualisiert wird, kann sich zwischen den Browsern leicht unterscheiden.