Signatur
Beschreibung
Die Eigenschaft y von SVGSVGElement spiegelt das Attribut y eines <svg>-Elements wider. Sie gibt an, wie weit ein verschachteltes <svg>-Element innerhalb des umgebenden SVG-Koordinatensystems nach unten versetzt ist. Beim äußersten <svg>-Element (direkt im HTML-Dokument) hat y keine Wirkung.
Der Rückgabewert ist ein SVGAnimatedLength-Objekt mit zwei Unterobjekten vom Typ SVGLength:
baseVal– der im Attribut festgelegte Grundwert, der sich lesen und ändern lässt.animVal– der aktuelle, eventuell durch SMIL-Animation (<animate>) veränderte Wert. Er ist nur lesbar.
Die Eigenschaft selbst ist schreibgeschützt: Man kann svg.y kein neues Objekt zuweisen. Den Wert ändert man stattdessen über svg.y.baseVal.value, baseVal.valueAsString, baseVal.newValueSpecifiedUnits() oder direkt mit setAttribute("y", …). Fehlt das Attribut, ist der Wert 0.
Rückgabewert
baseVal den Attributwert und dessen animVal den aktuell animierten Wert als SVGLength enthält.Beispiele
y-Position eines verschachtelten SVG auslesen
// HTML: <svg id="outer" width="300" height="200">
// <svg id="inner" x="20" y="40" width="100" height="100">…</svg>
// </svg>
const inner = document.getElementById("inner");
console.log(inner.y.baseVal.value); // Wert in Benutzereinheiten
console.log(inner.y.baseVal.valueAsString); // Originaler Attributtext
console.log(inner.y.animVal.value); // aktueller (animierter) Wert
Verschachteltes SVG vertikal verschieben
const inner = document.querySelector("#inner");
// Richtig: über baseVal ändern
inner.y.baseVal.value += 25;
console.log(inner.getAttribute("y"));
// Einheit explizit setzen (Prozent relativ zur Höhe des Viewports)
inner.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 10);
console.log(inner.y.baseVal.valueAsString);
Einfache Animation mit requestAnimationFrame
const panel = document.querySelector("#inner");
const start = performance.now();
const tick = (now) => {
const t = (now - start) / 1000;
// Auf- und Abbewegung um ±30 Einheiten
panel.y.baseVal.value = 50 + Math.sin(t * 2) * 30;
if (t < 5) requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
// Wichtig · Fallstricke
- Schreibgeschützt:
svg.y = 10hat keine Wirkung (im Strict Mode kommt einTypeError). Ändern Sie stattdessensvg.y.baseVal.value. - Äußerstes SVG: Beim obersten
<svg>-Element in HTML wirdyignoriert. Positionieren Sie es mit CSS. - Einheiten:
baseVal.valueliefert immer Benutzereinheiten. Bei Prozentangaben hängt das Ergebnis von der Größe des umgebenden Viewports ab. Das Element sollte deshalb im Dokument eingehängt und gerendert sein, sonst kann die Umrechnung ungenaue Werte liefern oder einen Fehler werfen. - animVal: Nur SMIL-Animationen verändern
animVal. CSS-Animationen der Eigenschafty(SVG 2) sind darin je nach Browser nicht enthalten. Den tatsächlich dargestellten Wert liefertgetComputedStyle(el).y. - Kompatibilität: Die Eigenschaft wird von allen modernen Browsern seit Langem unterstützt.