Signatur
Beschreibung
DOMRect.fromRect() ist eine statische Fabrikmethode. Sie erzeugt ein neues DOMRect aus einem beliebigen Objekt, das dem Wörterbuch DOMRectInit entspricht. Das kann ein einfaches Objektliteral wie { x: 10, y: 20, width: 100, height: 50 } sein, aber auch ein vorhandenes DOMRect oder DOMRectReadOnly, etwa der Rückgabewert von getBoundingClientRect().
Besonders nützlich ist die Methode, um eine unabhängige, veränderbare Kopie eines Rechtecks anzulegen. Du kannst diese Kopie verschieben oder in der Größe ändern, ohne das Original anzufassen. Außerdem lassen sich damit reine Datenobjekte, zum Beispiel aus JSON oder einem Zustandsspeicher, in echte DOMRect-Instanzen umwandeln. Diese bringen dann die abgeleiteten Eigenschaften top, right, bottom und left mit.
Fehlende Eigenschaften im übergebenen Objekt werden als 0 behandelt. Rufst du die Methode ganz ohne Argument auf, erhältst du ein Rechteck mit lauter Nullen. Die Methode liest nur x, y, width und height. Werte wie top oder left im Eingabeobjekt werden ignoriert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $rect | DOMRectInit | DOMRect | DOMRectReadOnly | Object | {} | Objekt mit den optionalen Zahleneigenschaften x, y, width und height (jeweils Standardwert 0). |
Rückgabewert
DOMRect mit den übergebenen Werten für Position und Größe. Es ist unabhängig vom Eingabeobjekt.Beispiele
Rechteck aus einem Objektliteral erzeugen
const rect = DOMRect.fromRect({ x: 10, y: 20, width: 200, height: 100 });
console.log(rect.left, rect.top, rect.right, rect.bottom);
Veränderbare Kopie von getBoundingClientRect()
const box = document.querySelector('#karte');
const original = box.getBoundingClientRect();
// Kopie anlegen und um 8 px nach allen Seiten vergrößern
const gepolstert = DOMRect.fromRect(original);
gepolstert.x -= 8;
gepolstert.y -= 8;
gepolstert.width += 16;
gepolstert.height += 16;
console.log(original === gepolstert); // false
console.log(gepolstert.width - original.width);
Gespeicherte Daten wieder in ein DOMRect umwandeln
const json = '{"x":50,"y":30,"width":120,"height":80}';
const rect = DOMRect.fromRect(JSON.parse(json));
const enthaeltPunkt = (r, px, py) =>
px >= r.left && px <= r.right && py >= r.top && py <= r.bottom;
console.log(rect instanceof DOMRect);
console.log(enthaeltPunkt(rect, 100, 60));
console.log(JSON.stringify(rect.toJSON()));
Aufruf ohne Argument und mit Teilwerten
console.log(DOMRect.fromRect().width);
console.log(DOMRect.fromRect({ width: 40 }).right);
// Wichtig · Fallstricke
- Negative Größen:
widthundheightdürfen negativ sein. Dann istleftkleiner alsxbzw.topkleiner alsy. Verlass dich deshalb für Kanten aufleft/top/right/bottomund nicht aufx/y. - Werte wie
topoderleftwerden ignoriert: Ein Objekt wie{ top: 10, left: 5 }ergibt ein Rechteck bei (0, 0). - Keine Live-Bindung: Das Ergebnis ist eine Momentaufnahme. Verschiebt sich das Element nach Scrollen oder Layout-Änderungen, musst du
getBoundingClientRect()erneut aufrufen. - Unterschied zum Konstruktor:
new DOMRect(x, y, width, height)nimmt einzelne Zahlen entgegen,fromRect()dagegen ein Objekt. Für ein unveränderliches Ergebnis nimmst duDOMRectReadOnly.fromRect(). - Kompatibilität: Wird in Chrome/Edge 61+, Firefox 69+ und Safari 10.1+ unterstützt. In Node.js gibt es die Methode nicht, weil
DOMRecteine reine Browser-API ist (nur über Bibliotheken wie jsdom teilweise verfügbar).