Start · Sprachen · JavaScript · Referenz · SVGSVGElement.createSVGRect()

SVGSVGElement.createSVGRect()

Methode

Erzeugt ein neues, vom Dokument losgelöstes <code>DOMRect</code>-Objekt mit <code>x</code>, <code>y</code>, <code>width</code> und <code>height</code> gleich 0.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

SVGSVGElement.prototype.createSVGRect()

Beschreibung

Die Methode createSVGRect() des SVGSVGElement-Interfaces liefert ein neues Rechteck-Objekt vom Typ DOMRect (früher SVGRect). Das Objekt gehört zu keinem Dokumentbaum. Alle vier Koordinaten (x, y, width, height) stehen anfangs auf 0 und lassen sich direkt beschreiben.

Gebraucht wird die Methode vor allem mit älteren SVG-APIs, die ein Rechteck als Argument verlangen. Klassische Fälle sind SVGSVGElement.getIntersectionList(), getEnclosureList() und checkIntersection(). Man kann damit auch Bereiche für eigene Treffertests oder Layout-Berechnungen im SVG-Koordinatensystem beschreiben.

In modernem Code ist new DOMRect(x, y, width, height) meist die bessere Wahl. Der Konstruktor braucht kein <svg>-Element und setzt alle Werte in einem Aufruf. createSVGRect() bleibt aber aus Kompatibilitätsgründen erhalten und funktioniert in allen gängigen Browsern.

Rückgabewert

Typ
DOMRect
Beschreibung
Ein neues, veränderbares DOMRect-Objekt, dessen Werte x, y, width und height alle auf 0 stehen.

Beispiele

Rechteck erzeugen und befüllen

const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
const rect = svg.createSVGRect();
console.log(rect.x, rect.y, rect.width, rect.height);

rect.x = 10;
rect.y = 20;
rect.width = 100;
rect.height = 50;
console.log(rect.right, rect.bottom);
0 0 0 0 110 70

Elemente in einem Auswahlbereich finden (getIntersectionList)

// Voraussetzung: <svg id="canvas" width="300" height="200"> mit mehreren Formen
const svg = document.getElementById('canvas');

const selectArea = (x, y, width, height) => {
  const area = svg.createSVGRect();
  Object.assign(area, { x, y, width, height });
  // Nicht jeder Browser implementiert getIntersectionList (z. B. Firefox nicht)
  if (typeof svg.getIntersectionList !== 'function') return [];
  return [...svg.getIntersectionList(area, null)];
};

const hits = selectArea(0, 0, 150, 100);
console.log(`${hits.length} Elemente im Auswahlbereich`);
z. B. "3 Elemente im Auswahlbereich"

Eigener Treffertest mit getBBox()

const svg = document.querySelector('svg');
const circle = svg.querySelector('circle');

const viewport = svg.createSVGRect();
Object.assign(viewport, { x: 0, y: 0, width: 200, height: 200 });

const intersects = (a, b) =>
  a.x < b.x + b.width && a.x + a.width > b.x &&
  a.y < b.y + b.height && a.y + a.height > b.y;

console.log(intersects(viewport, circle.getBBox()));
true (wenn der Kreis im Bereich 0–200 liegt)

// Wichtig · Fallstricke

  • Die Methode gibt es nur an <svg>-Elementen (SVGSVGElement), nicht an anderen SVG-Elementen wie <rect>.
  • Das zurückgegebene Objekt ist ein reines Werte-Objekt. Änderungen daran wirken sich nicht auf Elemente im Dokument aus.
  • Die Werte gelten im Nutzerkoordinatensystem des jeweiligen Kontexts. Sie sind keine Bildschirm-Pixel wie bei getBoundingClientRect().
  • Ältere Browser liefern ein SVGRect. Nach SVG 2 ist das ein Alias für DOMRect. Die berechneten Eigenschaften top, right, bottom und left gibt es darum nur in modernen Browsern.
  • Browser-Unterstützung: createSVGRect() funktioniert in allen aktuellen Browsern. Die Methoden, an die man das Rechteck typischerweise übergibt (getIntersectionList, checkIntersection), fehlen jedoch in Firefox. Für neuen Code ist new DOMRect() vorzuziehen.