Signatur
Beschreibung
newValueSpecifiedUnits() setzt den Wert eines SVGAngle-Objekts in einem Schritt: Du gibst eine Einheit (unitType) und die Zahl in dieser Einheit an. Danach sind unitType, valueInSpecifiedUnits, valueAsString und value (immer in Grad) neu berechnet.
Am nützlichsten ist die Methode, wenn du Winkel in SVG-Elementen per Skript ändern willst, ohne Attribut-Strings selbst zusammenzubauen. Ein typisches Beispiel ist das orient-Attribut von <marker>, das über SVGMarkerElement.orientAngle.baseVal erreichbar ist. Eigenständige Winkelobjekte erzeugst du mit SVGSVGElement.createSVGAngle().
Als Einheit sind die Konstanten des Interfaces erlaubt: SVGAngle.SVG_ANGLETYPE_UNSPECIFIED (1, eine reine Zahl, wird als Grad gelesen), SVG_ANGLETYPE_DEG (2), SVG_ANGLETYPE_RAD (3) und SVG_ANGLETYPE_GRAD (4). SVG_ANGLETYPE_UNKNOWN (0) ist nicht erlaubt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $unitType Pflicht | number | Die Einheit als Konstante von SVGAngle: SVG_ANGLETYPE_UNSPECIFIED (1), SVG_ANGLETYPE_DEG (2), SVG_ANGLETYPE_RAD (3) oder SVG_ANGLETYPE_GRAD (4). |
|
| $valueInSpecifiedUnits Pflicht | number | Der Zahlenwert des Winkels in der angegebenen Einheit, z. B. 90 bei Grad oder Math.PI / 2 bei Radiant. |
Rückgabewert
undefined). Die Methode ändert das SVGAngle-Objekt direkt.Beispiele
Winkel in Grad setzen und auslesen
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
const angle = svg.createSVGAngle();
angle.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_DEG, 90);
console.log(angle.unitType); // 2 (DEG)
console.log(angle.valueInSpecifiedUnits); // 90
console.log(angle.value); // Wert immer in Grad
console.log(angle.valueAsString);
Radiant und Gon werden in Grad umgerechnet
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
const angle = svg.createSVGAngle();
angle.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_RAD, Math.PI / 2);
console.log(angle.valueAsString, angle.value.toFixed(2));
angle.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_GRAD, 100);
console.log(angle.valueAsString, angle.value.toFixed(2));
Marker-Ausrichtung per Skript ändern
// <svg><defs><marker id="pfeil" orient="auto" ...></marker></defs></svg>
const marker = document.querySelector("#pfeil");
// Festen Winkel von 45° setzen – das orient-Attribut wird mitgeändert
marker.orientAngle.baseVal.newValueSpecifiedUnits(
SVGAngle.SVG_ANGLETYPE_DEG,
45
);
console.log(marker.orientAngle.baseVal.value);
console.log(marker.getAttribute("orient"));
Ungültige Einheit abfangen
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
const angle = svg.createSVGAngle();
try {
angle.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_UNKNOWN, 10);
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Ausnahmen: Wenn
unitTypeSVG_ANGLETYPE_UNKNOWNoder ein ungültiger Wert ist, wirft die Methode eineDOMExceptionvom TypNotSupportedError. Schreibgeschützte Winkel, etwaanimVal, lösenNoModificationAllowedErroraus. Ändere daher immerbaseVal. - Genauigkeit: Winkel werden als 32-Bit-Gleitkommazahl gespeichert. Radiant-Werte wie
Math.PI / 2ergeben deshalb kleine Rundungsfehler invalueundvalueAsString. valueliefert immer Grad. Die ursprüngliche Einheit steht inunitTypeundvalueInSpecifiedUnits.- Wenn du nur die Einheit wechseln willst und der Winkel gleich bleiben soll, nimm
convertToSpecifiedUnits(). - Kompatibilität: Wird von allen aktuellen Browsern unterstützt. Wie der Browser den Wert als Attribut-String zurückschreibt (z. B.
"45"oder"45deg"), kann sich leicht unterscheiden.