Start · Sprachen · JavaScript · Referenz · DOMRectReadOnly

DOMRectReadOnly

Schnittstelle

Beschreibt ein Rechteck mit Position und Größe, dessen Eigenschaften (<code>x</code>, <code>y</code>, <code>width</code>, <code>height</code>, <code>top</code> …) nur gelesen werden können.

seit JavaScript Baseline: alle modernen Browser (seit ca. 2020 vol Kategorie: webapi

Signatur

interface DOMRectReadOnly

Beschreibung

DOMRectReadOnly ist die Basisschnittstelle für rechteckige Bereiche im DOM. Sie stellt die Koordinaten x und y (linke obere Ecke) sowie width und height bereit. Zusätzlich gibt es die abgeleiteten Eigenschaften top, right, bottom und left, die auch bei negativen Breiten oder Höhen immer die tatsächlichen Kanten liefern.

Man trifft die Schnittstelle vor allem als Rückgabewert von Web-APIs an: ResizeObserverEntry.contentRect, IntersectionObserverEntry.boundingClientRect, intersectionRect und rootBounds sind DOMRectReadOnly-Objekte. Element.getBoundingClientRect() liefert dagegen die veränderbare Unterklasse DOMRect, die sich aber genauso auslesen lässt.

Eigene Instanzen erzeugt man mit dem Konstruktor new DOMRectReadOnly(x, y, width, height) oder mit der statischen Methode DOMRectReadOnly.fromRect(obj). Die Methode toJSON() gibt ein einfaches Objekt mit allen Eigenschaften zurück, das sich z. B. zum Protokollieren oder Übertragen serialisieren lässt.

  • Eigenschaften: x, y, width, height, top, right, bottom, left (alle number, nur lesbar)
  • Methoden: toJSON(), statisch DOMRectReadOnly.fromRect()

Parameter

Name Typ Default Beschreibung
$x number 0 X-Koordinate des Ursprungs (in der Regel die linke Kante).
$y number 0 Y-Koordinate des Ursprungs (in der Regel die obere Kante).
$width number 0 Breite des Rechtecks; darf negativ sein.
$height number 0 Höhe des Rechtecks; darf negativ sein.

Rückgabewert

Typ
DOMRectReadOnly
Beschreibung
Ein neues, unveränderliches Rechteck-Objekt (beim Aufruf von new DOMRectReadOnly() oder DOMRectReadOnly.fromRect()).

Beispiele

Instanz erzeugen und Kanten auslesen

const rect = new DOMRectReadOnly(10, 20, 200, 100);

console.log(rect.left, rect.top);     // linke obere Ecke
console.log(rect.right, rect.bottom); // rechte untere Ecke

// Zuweisungen werden ignoriert (im Strict Mode: TypeError)
rect.width = 999;
console.log(rect.width);
10 20 210 120 200

Größenänderungen mit ResizeObserver verfolgen

const box = document.querySelector('#panel');

const observer = new ResizeObserver((entries) => {
  for (const entry of entries) {
    // contentRect ist ein DOMRectReadOnly
    const { width, height } = entry.contentRect;
    console.log(`Neue Größe: ${Math.round(width)} × ${Math.round(height)} px`);
  }
});

observer.observe(box);
Neue Größe: 320 × 180 px

fromRect() und toJSON() zum Serialisieren

const rect = DOMRectReadOnly.fromRect({ x: 5, y: 5, width: 50, height: -20 });

// Negative Höhe: top/bottom werden korrekt normalisiert
console.log(rect.y, rect.top, rect.bottom);

console.log(JSON.stringify(rect.toJSON()));
5 -15 5 {"x":5,"y":5,"width":50,"height":-20,"top":-15,"right":55,"bottom":5,"left":5}

Überlappung zweier Rechtecke prüfen

const overlaps = (a, b) =>
  a.left < b.right && a.right > b.left &&
  a.top < b.bottom && a.bottom > b.top;

const a = new DOMRectReadOnly(0, 0, 100, 100);
const b = new DOMRectReadOnly(50, 50, 100, 100);
const c = new DOMRectReadOnly(200, 0, 10, 10);

console.log(overlaps(a, b), overlaps(a, c));
true false

// Wichtig · Fallstricke

  • Nur lesbar: Zuweisungen an Eigenschaften werden im Sloppy Mode stillschweigend ignoriert, im Strict Mode (z. B. in ES-Modulen) lösen sie einen TypeError aus. Für veränderbare Rechtecke nutzt man DOMRect.
  • Negative Maße: x/y sind nicht immer die linke/obere Kante. Wenn Breite oder Höhe negativ sein können, verwendet man besser left, top, right und bottom.
  • Keine eigenen Eigenschaften: Die Werte sind Getter auf dem Prototyp. JSON.stringify(rect) funktioniert nur, weil toJSON() existiert. Mit Spread ({...rect}) oder Object.keys() erhält man dagegen ein leeres Objekt.
  • Momentaufnahme: Das Objekt wird nicht automatisch aktualisiert. Nach Layout-Änderungen müssen die Werte neu abgefragt werden.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. fromRect() fehlt in alten Safari- und Edge-Versionen (EdgeHTML), und der Internet Explorer kennt nur ein älteres ClientRect ohne x/y.