Signatur
Beschreibung
SVGAnimatedEnumeration ist das Wrapper-Objekt, das SVG-DOM-Eigenschaften zurückgeben, wenn das zugehörige Attribut nur einen von wenigen festgelegten Schlüsselwörtern annehmen darf, zum Beispiel gradientUnits="userSpaceOnUse", spreadMethod="reflect" oder lengthAdjust="spacingAndGlyphs". Statt der Zeichenkette liefert das DOM eine Ganzzahl (unsigned short), die einer Konstanten des jeweiligen Interfaces entspricht, etwa SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE (Wert 1).
Das Interface hat genau zwei Eigenschaften:
baseVal– der Wert, wie er im Attribut steht (ohne laufende Animation). Du kannst ihn lesen und schreiben; beim Schreiben wird das Attribut im Markup mit dem passenden Schlüsselwort aktualisiert.animVal– nur lesbar; der aktuelle Wert, wenn gerade eine SMIL-Animation (<animate>,<set>) läuft. Ohne Animation ist er gleichbaseVal.
Typische Stellen, an denen du auf SVGAnimatedEnumeration triffst: SVGGradientElement.gradientUnits und .spreadMethod, SVGClipPathElement.clipPathUnits, SVGMaskElement.maskUnits, SVGFilterElement.filterUnits, SVGMarkerElement.markerUnits und .orientType, SVGTextContentElement.lengthAdjust, SVGFEBlendElement.mode oder SVGFETurbulenceElement.type.
Nutze das Interface, wenn du solche Attribute typsicher auswerten oder ändern willst, ohne Zeichenketten zu vergleichen. Wenn dir lesbare Schlüsselwörter wichtiger sind, sind getAttribute()/setAttribute() oft einfacher.
Beispiele
Einheitensystem eines Farbverlaufs auslesen
const SVG_NS = 'http://www.w3.org/2000/svg';
const grad = document.createElementNS(SVG_NS, 'linearGradient');
grad.setAttribute('gradientUnits', 'userSpaceOnUse');
const units = grad.gradientUnits; // SVGAnimatedEnumeration
console.log(units instanceof SVGAnimatedEnumeration);
console.log(units.baseVal);
console.log(units.baseVal === SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE);
baseVal setzen – Attribut wird automatisch aktualisiert
const SVG_NS = 'http://www.w3.org/2000/svg';
const grad = document.createElementNS(SVG_NS, 'radialGradient');
// Standardwert ohne Attribut: pad
console.log(grad.spreadMethod.baseVal === SVGGradientElement.SVG_SPREADMETHOD_PAD);
grad.spreadMethod.baseVal = SVGGradientElement.SVG_SPREADMETHOD_REFLECT;
console.log(grad.getAttribute('spreadMethod'));
Zahl in lesbares Schlüsselwort übersetzen
const unitNames = {
[SVGUnitTypes.SVG_UNIT_TYPE_UNKNOWN]: 'unknown',
[SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE]: 'userSpaceOnUse',
[SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX]: 'objectBoundingBox'
};
const describeUnits = (el, prop) => {
const { baseVal, animVal } = el[prop];
return `${prop}: basis=${unitNames[baseVal]}, animiert=${unitNames[animVal]}`;
};
const clip = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');
clip.setAttribute('clipPathUnits', 'objectBoundingBox');
console.log(describeUnits(clip, 'clipPathUnits'));
Ungültigen Wert abfangen
const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
try {
text.lengthAdjust.baseVal = 0; // 0 = UNKNOWN, darf nicht gesetzt werden
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
animValist schreibgeschützt: Eine Zuweisung wird still ignoriert oder wirft im Strict Mode einen Fehler. Ändere immerbaseVal.- Ungültige Werte: Laut SVG 2 wirft das Setzen von
0(die*_UNKNOWN-Konstante) oder einer Zahl außerhalb der Aufzählung einenTypeError. Ältere Browser warfen stattdessen eineDOMExceptionoder ignorierten den Wert. Fange Zuweisungen deshalb bei Bedarf mittry…catchab. - Unbekannte Schlüsselwörter im Markup (z. B. Tippfehler wie
gradientUnits="userspace") ergeben meist den Standardwert des Attributs, nicht0. Prüfe im Zweifel zusätzlich mitgetAttribute(). animValund Animationen: Nur SMIL-Animationen wirken aufanimVal. CSS-Animationen und die Web Animations API ändern diese Attribute nicht, weil es keine CSS-Eigenschaften sind. Je nach Browser kann sich die Aktualisierung vonanimValwährend einer SMIL-Animation unterschiedlich verhalten.- Neuere Aufzählungen: In SVG 2 sind einige Attribute (z. B. Blend-Modi von
<feBlend>) um Schlüsselwörter erweitert worden, für die es keine numerische Konstante gibt.baseValliefert dann0. Nutze in diesem FallgetAttribute(). - Das Interface ist seit SVG 1.1 in allen modernen Browsern verfügbar. Das Objekt ist „live“: Es spiegelt spätere Änderungen am Attribut sofort wider.