Signatur
Beschreibung
scale3d() multipliziert die aktuelle Matrix mit einer gleichmäßigen 3D-Skalierung: x, y und z werden mit demselben Faktor scale gestreckt oder gestaucht. Die Ausgangsmatrix bleibt dabei unverändert. Sie erhalten immer eine neue DOMMatrix, auch wenn Sie die Methode auf einer DOMMatrixReadOnly aufrufen.
Mit den optionalen Parametern originX, originY und originZ legen Sie den Fixpunkt der Skalierung fest. Intern entspricht das der Folge translate(originX, originY, originZ) → scale3d(scale) → translate(-originX, -originY, -originZ). So funktioniert es auch bei transform-origin in CSS.
Typische Einsatzgebiete sind das Berechnen von CSS-Transformationen in JavaScript, zum Beispiel für Zoom-Effekte in 3D-Szenen, das Umrechnen von Punkten mit transformPoint() und das Verketten mehrerer Transformationen, ohne Matrixwerte selbst auszurechnen. Wenn Sie die Achsen unterschiedlich skalieren wollen, nehmen Sie stattdessen scale(). Diese Methode akzeptiert eigene Faktoren für x, y und z.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $scale | number | 1 | Skalierungsfaktor, der gleichzeitig auf die x-, y- und z-Achse wirkt. Werte zwischen 0 und 1 verkleinern, Werte über 1 vergrößern, negative Werte spiegeln zusätzlich. |
| $originX | number | 0 | x-Koordinate des Ursprungspunkts, um den skaliert wird. |
| $originY | number | 0 | y-Koordinate des Ursprungspunkts, um den skaliert wird. |
| $originZ | number | 0 | z-Koordinate des Ursprungspunkts, um den skaliert wird. |
Rückgabewert
DOMMatrix, das Produkt aus der Ausgangsmatrix und der 3D-Skalierung. Die Ausgangsmatrix wird nicht verändert.Beispiele
Gleichmäßig auf allen Achsen verdoppeln
const identitaet = new DOMMatrixReadOnly();
const skaliert = identitaet.scale3d(2);
console.log(skaliert.toString());
console.log(skaliert.is2D);
// Die Ausgangsmatrix bleibt unverändert
console.log(identitaet.toString());
Skalieren um einen Ursprungspunkt (wie transform-origin)
// Um den Mittelpunkt eines 100×100-Elements skalieren
const m = new DOMMatrixReadOnly().scale3d(2, 50, 50, 0);
console.log(m.toString());
// Der Mittelpunkt bleibt fix, die Ecke wandert nach außen
const mitte = m.transformPoint(new DOMPoint(50, 50, 0));
const ecke = m.transformPoint(new DOMPoint(0, 0, 0));
console.log(mitte.x, mitte.y, mitte.z);
console.log(ecke.x, ecke.y, ecke.z);
Transformation verketten und auf ein Element anwenden
const karte = document.querySelector('.karte');
const transform = new DOMMatrixReadOnly()
.translate(0, 0, -100)
.rotate(0, 30, 0)
.scale3d(1.2); // zum Schluss gleichmäßig vergrößern
// toString() liefert eine gültige CSS-Funktion matrix3d(...)
karte.style.transform = transform.toString();
// Wichtig · Fallstricke
- Nicht verändernd:
scale3d()gibt immer eine neue Matrix zurück. Um eine bestehendeDOMMatrixdirekt zu ändern, verwenden SieDOMMatrix.prototype.scale3dSelf(). - Nur ein Faktor: Alle drei Achsen werden gleich skaliert. Für unterschiedliche Faktoren nehmen Sie
scale(scaleX, scaleY, scaleZ, originX, originY, originZ). - 2D-Status geht verloren: Ein Faktor ungleich
1verändertm33. Die Ergebnis-Matrix hat dannis2D === false, undtoString()liefertmatrix3d(...)stattmatrix(...). - Reihenfolge zählt: Die Skalierung wird von rechts an die bestehende Matrix multipliziert.
m.translate(...).scale3d(2)ergibt deshalb etwas anderes alsm.scale3d(2).translate(...). - Bei einem Faktor von
0ist die Matrix nicht mehr invertierbar.inverse()liefert dann eine Matrix aus lauterNaN. Nicht endliche Werte führen außerdem dazu, dasstoString()einen Fehler wirft. - Kompatibilität: Wird in allen aktuellen Browsern und in Web Workern unterstützt. Ältere WebKit-Versionen kennen nur
WebKitCSSMatrix, heute ein Alias fürDOMMatrix. In Node.js istDOMMatrixnicht eingebaut.