Signatur
Beschreibung
skewX() schert eine Transformationsmatrix entlang der x-Achse: Punkte werden abhängig von ihrer y-Koordinate horizontal verschoben. Das entspricht der CSS-Funktion skewX(). Die Methode multipliziert die aktuelle Matrix von rechts mit einer Schermatrix, deren Eintrag c den Wert tan(sx) hat. Es gilt also ergebnis = this × skewX(sx).
Die Methode gehört zu DOMMatrixReadOnly und verändert die Ausgangsmatrix nicht. Sie gibt immer eine neue DOMMatrix zurück. Deshalb kann man mehrere Transformationen gefahrlos verketten, etwa m.translate(10, 0).skewX(20). Soll die bestehende Matrix direkt geändert werden, nimmt man DOMMatrix.prototype.skewXSelf().
Typische Einsatzfälle sind das Berechnen von CSS-Transformationen in JavaScript, Transformationen auf einem <canvas> mit setTransform() und das Umrechnen einzelner Punkte mit DOMPoint.matrixTransform(), zum Beispiel für Hit-Tests bei gescherten Elementen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $sx | number | 0 | Scherwinkel in Grad (nicht Bogenmaß). Positive Werte scheren nach rechts, negative nach links. |
Rückgabewert
DOMMatrix, die aus der Ausgangsmatrix und der Scherung entlang der x-Achse besteht. Die ursprüngliche Matrix bleibt unverändert.Beispiele
Einfache Scherung einer Einheitsmatrix
const identity = new DOMMatrixReadOnly();
const skewed = identity.skewX(30);
// Der Eintrag c enthält tan(30°)
console.log(skewed.c.toFixed(4));
console.log(skewed.is2D);
// Die Ausgangsmatrix bleibt unverändert
console.log(identity.c);
Punkt mit einer gescherten Matrix umrechnen
const matrix = new DOMMatrixReadOnly().skewX(30);
// Ein Punkt 10 px unterhalb des Ursprungs wird nach rechts verschoben
const point = new DOMPoint(0, 10).matrixTransform(matrix);
console.log(point.x.toFixed(3), point.y);
Verkettete Transformation auf ein Element anwenden
const box = document.querySelector('.box');
const transform = new DOMMatrixReadOnly()
.translate(50, 20)
.skewX(-15)
.scale(1.2);
// DOMMatrix lässt sich direkt als CSS-transform-Wert serialisieren
box.style.transform = transform.toString();
console.log(box.style.transform.startsWith('matrix('));
Canvas-Zeichnung scheren
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const m = new DOMMatrix().translate(100, 50).skewX(20);
ctx.setTransform(m);
ctx.fillStyle = 'teal';
ctx.fillRect(0, 0, 80, 60); // wird als Parallelogramm gezeichnet
ctx.resetTransform();
// Wichtig · Fallstricke
- Grad statt Bogenmaß:
sxwird in Grad angegeben, anders als beiMath.tan()oderCanvasRenderingContext2D.rotate(). - Nahe 90°: Bei Winkeln nahe ±90° geht
tan(sx)gegen unendlich. Die Matrix bekommt dann extrem große Werte und ist praktisch unbrauchbar. - Gleitkomma-Rundung:
skewX(45)ergibt fürcmeist0.9999999999999999statt genau1. Vergleiche deshalb mit Toleranz durchführen. - Reihenfolge zählt: Die Scherung wird von rechts multipliziert.
m.translate(10, 0).skewX(20)ergibt ein anderes Ergebnis alsm.skewX(20).translate(10, 0). - Nicht verändernd: Jeder Aufruf erzeugt ein neues Objekt. In Animationsschleifen mit vielen Aufrufen kann
skewXSelf()auf einerDOMMatrixeffizienter sein. - Kompatibilität: Wird in allen aktuellen Browsern und in Web Workers unterstützt. Node.js stellt
DOMMatrixnicht von Haus aus bereit.