Start · Sprachen · JavaScript · Referenz · DOMRectReadOnly.fromRect()

DOMRectReadOnly.fromRect()

Methode

Die statische Methode erstellt ein neues, unveränderliches <code>DOMRectReadOnly</code>-Objekt aus einem Objekt mit <code>x</code>, <code>y</code>, <code>width</code> und <code>height</code>.

seit JavaScript Baseline: alle modernen Browser (Chrome 61+, Firef Kategorie: webapi

Signatur

DOMRectReadOnly.fromRect(rect)

Beschreibung

DOMRectReadOnly.fromRect() ist eine statische Fabrikmethode. Sie nimmt ein beliebiges Objekt entgegen, das dem Wörterbuch DOMRectInit entspricht, also die Eigenschaften x, y, width und height hat. Daraus erzeugt sie ein neues DOMRectReadOnly. Fehlende Eigenschaften werden mit 0 belegt.

Die Methode ist praktisch, wenn Sie ein Rechteck aus vorhandenen Daten bauen wollen. Das können etwa Werte aus JSON, aus einem Canvas-Layout oder ein DOMRect von getBoundingClientRect() sein. Der Konstruktor new DOMRectReadOnly(x, y, width, height) braucht einzelne Argumente. fromRect() nimmt dagegen direkt ein Objekt entgegen. So lässt sich ein bestehendes Rechteck leicht als unveränderliche Kopie festhalten.

Das Ergebnis stellt zusätzlich die berechneten Eigenschaften top, right, bottom und left bereit. Alle Eigenschaften sind schreibgeschützt. Wenn Sie ein veränderbares Rechteck brauchen, verwenden Sie DOMRect.fromRect().

Parameter

Name Typ Default Beschreibung
$rect DOMRectInit | DOMRect | DOMRectReadOnly | Object {} Objekt mit den optionalen Eigenschaften x, y, width und height (jeweils number, Standardwert 0). Ohne Argument entsteht ein Rechteck, bei dem alle Werte 0 sind.

Rückgabewert

Typ
DOMRectReadOnly
Beschreibung
Ein neues, schreibgeschütztes Rechteck mit den übergebenen Werten für Position und Größe.

Beispiele

Rechteck aus einem einfachen Objekt erzeugen

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

console.log(rect.left, rect.top, rect.right, rect.bottom);
console.log(rect instanceof DOMRectReadOnly);
10 20 110 70 true

Unveränderliche Momentaufnahme einer Elementposition

const box = document.querySelector('body');
// Position zum aktuellen Zeitpunkt als schreibgeschützte Kopie festhalten
const snapshot = DOMRectReadOnly.fromRect(box.getBoundingClientRect());

snapshot.width = 9999; // wird ignoriert, im strict mode TypeError
console.log(snapshot.width === box.getBoundingClientRect().width);
true

Fehlende Werte und Überschneidungsprüfung

const a = DOMRectReadOnly.fromRect({ width: 50, height: 50 }); // x = y = 0
const b = DOMRectReadOnly.fromRect({ x: 40, y: 40, width: 30, height: 30 });

const intersects = (r1, r2) =>
  r1.left < r2.right && r2.left < r1.right &&
  r1.top < r2.bottom && r2.top < r1.bottom;

console.log(a.x, a.y, intersects(a, b));
0 0 true

Aus JSON serialisieren und wiederherstellen

const original = DOMRectReadOnly.fromRect({ x: 5, y: 5, width: 20, height: 10 });
const json = JSON.stringify(original.toJSON());

const restored = DOMRectReadOnly.fromRect(JSON.parse(json));
console.log(json);
console.log(restored.right);
{"x":5,"y":5,"width":20,"height":10,"top":5,"right":25,"bottom":15,"left":5} 25

// Wichtig · Fallstricke

  • Negative Breite oder Höhe sind erlaubt. Dann gilt z. B. left = x + width. left, top, right und bottom geben immer die richtig sortierten Kanten zurück.
  • Nur die Eigenschaften x, y, width und height werden ausgewertet. Die Werte top, left, right und bottom im übergebenen Objekt werden ignoriert.
  • Nicht-numerische Werte werden in Zahlen umgewandelt. Dabei kann NaN entstehen, ohne dass ein Fehler geworfen wird.
  • Schreiben auf Eigenschaften hat keine Wirkung. Im strict mode, also auch in ES-Modulen, wird ein TypeError geworfen.
  • Kompatibilität: in allen aktuellen Browsern und in Web Workern verfügbar. Ältere Safari-Versionen vor 14.1 unterstützen fromRect() nicht. Verwenden Sie dort den Konstruktor new DOMRectReadOnly(x, y, w, h). In Node.js gibt es die Methode nicht.