Signatur
Beschreibung
Die Eigenschaft x eines SVGRect enthält die horizontale Position der linken oberen Ecke eines Rechtecks. Der Wert ist eine Gleitkommazahl in Benutzerkoordinaten (User Units) des jeweiligen SVG-Koordinatensystems, also nicht zwingend in CSS-Pixeln.
SVGRect-Objekte bekommt man meist über SVGGraphicsElement.getBBox() (Begrenzungsrahmen eines Elements), über svgElement.viewBox.baseVal (den viewBox des Wurzelelements) oder als neues Objekt über SVGSVGElement.createSVGRect(). Zusammen mit y, width und height beschreibt x das Rechteck vollständig.
In SVG 2 ist SVGRect nur noch ein Alias für DOMRect. In den meisten Fällen kann die Eigenschaft beschrieben werden: Setzt man etwa viewBox.baseVal.x, ändert sich sofort das viewBox-Attribut des Elements – ideal zum Verschieben (Panning) einer Ansicht, ohne Attribut-Strings zusammenzubauen.
Rückgabewert
double) in Benutzerkoordinaten. Der Wert kann negativ sein.Beispiele
Begrenzungsrahmen eines Elements auslesen
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
circle.setAttribute('cx', '50');
circle.setAttribute('cy', '40');
circle.setAttribute('r', '20');
svg.appendChild(circle);
document.body.appendChild(svg); // getBBox braucht ein gerendertes Element
const box = circle.getBBox();
console.log(`x: ${box.x}, Breite: ${box.width}`);
Ansicht horizontal verschieben (Panning über viewBox)
const svg = document.querySelector('svg'); // <svg viewBox="0 0 200 100">
const viewBox = svg.viewBox.baseVal;
const panBy = (dx) => {
viewBox.x += dx; // aktualisiert direkt das viewBox-Attribut
};
panBy(25);
console.log(viewBox.x, svg.getAttribute('viewBox'));
Neues Rechteck erzeugen und prüfen, ob ein Punkt darin liegt
const svg = document.querySelector('svg');
const rect = svg.createSVGRect();
rect.x = 10;
rect.y = 10;
rect.width = 80;
rect.height = 40;
const contains = (r, px, py) =>
px >= r.x && px <= r.x + r.width &&
py >= r.y && py <= r.y + r.height;
console.log(contains(rect, 50, 30)); // true
console.log(contains(rect, 5, 30)); // false
// Wichtig · Fallstricke
- Nur lesbare Rechtecke: Werte aus
viewBox.animValdürfen nicht verändert werden. Ein Schreibversuch wirft je nach Browser eineNoModificationAllowedError-DOMExceptionoder wird ignoriert. Zum Ändern immerbaseValverwenden. - Kopie oder Live-Objekt:
getBBox()liefert eine Momentaufnahme. Änderungen anbox.xverschieben das Element nicht.viewBox.baseValdagegen ist mit dem Attribut verknüpft. - Koordinatensystem:
getBBox().xbezieht sich auf das lokale Benutzerkoordinatensystem des Elements, ohne dessen eigenetransform. Für Bildschirmkoordinaten stattdessengetBoundingClientRect()odergetScreenCTM()nutzen. - Ist das Element nicht gerendert (z. B.
display: noneoder noch nicht im Dokument), liefertgetBBox()je nach Browser0-Werte oder wirft einen Fehler. - Kompatibilität: Wird von allen modernen Browsern unterstützt. Seit SVG 2 ist
SVGRectein Alias vonDOMRect, deshalb kanninstanceof DOMRectje nach Browsertrueliefern.