Signatur
Beschreibung
SVGUnitTypes ist ein reines Konstanten-Interface. Es hat weder Methoden noch veränderbare Eigenschaften und lässt sich nicht instanziieren. Es legt fest, welche Zahlenwerte die DOM-Eigenschaften zu Einheiten-Attributen wie gradientUnits, patternUnits, patternContentUnits, clipPathUnits, maskUnits, maskContentUnits, filterUnits und primitiveUnits annehmen.
Die Konstanten sind:
SVG_UNIT_TYPE_UNKNOWN(0): Der Typ ist keiner der vordefinierten Typen. Diesen Wert kann man nicht bewusst setzen.SVG_UNIT_TYPE_USERSPACEONUSE(1): EntsprichtuserSpaceOnUse. Koordinaten beziehen sich auf das Benutzerkoordinatensystem des Elements, das den Verlauf, das Muster o. Ä. referenziert.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX(2): EntsprichtobjectBoundingBox. Koordinaten sind Bruchteile (0–1) bzw. Prozentwerte der Bounding Box des referenzierenden Elements.
In der Praxis braucht man die Konstanten, wenn man die entsprechenden SVGAnimatedEnumeration-Eigenschaften ausliest oder ändert, etwa SVGLinearGradientElement.gradientUnits.baseVal oder SVGClipPathElement.clipPathUnits.baseVal. Mit den benannten Konstanten statt „magischer“ Zahlen bleibt der Code lesbar. Das ist besonders nützlich in Editoren, Diagramm-Bibliotheken oder Werkzeugen, die SVG-Grafiken verarbeiten oder umrechnen.
Rückgabewert
unsigned short): 0, 1 oder 2.Beispiele
Konstanten auslesen
// SVGUnitTypes ist nicht instanziierbar, die Konstanten liegen direkt am Interface-Objekt
console.log(SVGUnitTypes.SVG_UNIT_TYPE_UNKNOWN);
console.log(SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE);
console.log(SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
try {
new SVGUnitTypes();
} catch (err) {
console.log(err instanceof TypeError);
}
Einheitensystem eines Verlaufs prüfen
const svgNS = 'http://www.w3.org/2000/svg';
const gradient = document.createElementNS(svgNS, 'linearGradient');
// Ohne Attribut gilt der Standardwert objectBoundingBox
const units = gradient.gradientUnits.baseVal;
if (units === SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
console.log('Koordinaten relativ zur Bounding Box (0–1)');
} else if (units === SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE) {
console.log('Koordinaten im Benutzerkoordinatensystem');
}
Einheitensystem per DOM umschalten
const svgNS = 'http://www.w3.org/2000/svg';
const clip = document.createElementNS(svgNS, 'clipPath');
// Standard bei clipPath: userSpaceOnUse
console.log(clip.clipPathUnits.baseVal);
// Auf objectBoundingBox umstellen – das Attribut wird automatisch aktualisiert
clip.clipPathUnits.baseVal = SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
console.log(clip.getAttribute('clipPathUnits'));
Hilfsfunktion: Zahlenwert in Attributwert umwandeln
const unitName = (value) => ({
[SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE]: 'userSpaceOnUse',
[SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX]: 'objectBoundingBox'
})[value] ?? 'unknown';
const svgNS = 'http://www.w3.org/2000/svg';
const pattern = document.createElementNS(svgNS, 'pattern');
console.log('patternUnits:', unitName(pattern.patternUnits.baseVal));
console.log('patternContentUnits:', unitName(pattern.patternContentUnits.baseVal));
// Wichtig · Fallstricke
- Keine Instanzen:
new SVGUnitTypes()löst einenTypeErroraus. Man verwendet nur die statischen Konstanten, z. B.SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX. - Standardwerte beachten: Die Standardwerte unterscheiden sich je nach Attribut.
gradientUnits,patternUnits,maskUnitsundfilterUnitssind standardmäßigobjectBoundingBox(2).patternContentUnits,clipPathUnits,maskContentUnitsundprimitiveUnitssind standardmäßiguserSpaceOnUse(1). - UNKNOWN nicht setzen: Wird
baseValauf0oder einen ungültigen Wert gesetzt, lösen moderne Browser einenTypeErroraus bzw. ignorieren die Zuweisung. - baseVal vs. animVal:
animValist schreibgeschützt und gibt den Wert wieder, der gerade durch eine SMIL-Animation gilt. Ändern kann man nurbaseVal. - objectBoundingBox und Linien: Hat ein Element keine Fläche, etwa eine waagerechte Linie mit Bounding-Box-Höhe 0, wird ein Verlauf oder Clip mit
objectBoundingBoxnicht dargestellt. In diesem FalluserSpaceOnUseverwenden. - Kompatibilität: Wird von allen modernen Browsern unterstützt (Chrome, Edge, Firefox, Safari). In Node.js gibt es das Interface ohne DOM-Umgebung nicht. jsdom bildet es nur teilweise ab.