Signatur
Beschreibung
Der Konstruktor CSSRotate() gehört zum CSS Typed Object Model (CSS Typed OM). Er erzeugt ein Objekt, das eine Drehung als typisierten Wert abbildet und nicht als Zeichenkette. Solche Objekte werden meist in ein CSSTransformValue gepackt und über element.attributeStyleMap oder CSSStyleRule.styleMap gesetzt.
Es gibt zwei Aufrufformen:
new CSSRotate(angle)– eine 2D-Drehung, entsprichtrotate(angle). Die Eigenschaftis2Dist dabeitrue, und die Achse ist(0, 0, 1).new CSSRotate(x, y, z, angle)– eine 3D-Drehung um den Vektor(x, y, z), entsprichtrotate3d(x, y, z, angle). Hier istis2Dgleichfalse.
Der Vorteil gegenüber Zeichenketten wie `rotate(${deg}deg)`: Die Werte lassen sich direkt lesen und ändern (rotation.angle.value += 5). Der Browser muss dabei keine Zeichenketten zerlegen, und Einheitenfehler fallen schon beim Erzeugen auf, weil dann ein TypeError geworfen wird. Das ist vor allem bei Animationen in Schleifen praktisch.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $angle Pflicht | CSSNumericValue | Drehwinkel. Muss eine Winkeleinheit haben, z. B. CSS.deg(45), CSS.rad(1), CSS.turn(0.25) oder CSS.grad(50). In der 4-Argument-Form ist er der vierte Parameter. |
|
| $x | number | CSSNumericValue | X-Anteil der Drehachse (nur 3D-Form). Muss einheitenlos sein, also eine Zahl oder CSS.number(). |
|
| $y | number | CSSNumericValue | Y-Anteil der Drehachse (nur 3D-Form), einheitenlos. | |
| $z | number | CSSNumericValue | Z-Anteil der Drehachse (nur 3D-Form), einheitenlos. |
Rückgabewert
CSSRotate-Objekt mit den Eigenschaften x, y, z, angle und is2D. Die Methoden toString() und toMatrix() erbt es von CSSTransformComponent.Beispiele
2D-Drehung erzeugen und auslesen
const rotation = new CSSRotate(CSS.deg(45));
console.log(rotation.toString());
console.log(rotation.is2D);
console.log(rotation.angle.value, rotation.angle.unit);
3D-Drehung um eine eigene Achse
const rotation3d = new CSSRotate(1, 1, 0, CSS.turn(0.5));
console.log(rotation3d.toString());
console.log(rotation3d.is2D);
// Matrix für eigene Berechnungen
const matrix = rotation3d.toMatrix();
console.log(matrix instanceof DOMMatrix);
Element per attributeStyleMap drehen und animieren
const box = document.querySelector('.box');
if ('CSSRotate' in window && box.attributeStyleMap) {
const rotation = new CSSRotate(CSS.deg(0));
const transform = new CSSTransformValue([rotation]);
const tick = () => {
// Winkel direkt ändern, ohne Zeichenketten zu zerlegen
rotation.angle.value = (rotation.angle.value + 2) % 360;
box.attributeStyleMap.set('transform', transform);
requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
} else {
// Rückfall für Browser ohne CSS Typed OM (z. B. Firefox)
box.style.transform = 'rotate(0deg)';
}
Ungültige Einheit führt zu TypeError
try {
new CSSRotate(CSS.px(10)); // Länge statt Winkel
} catch (err) {
console.log(err.name);
}
try {
new CSSRotate(CSS.px(1), 0, 0, CSS.deg(30)); // Achse mit Einheit
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Browser-Kompatibilität: CSS Typed OM gibt es in Chromium-Browsern (Chrome, Edge, Opera) ab Version 66 und in Safari ab 16.4. Firefox unterstützt es nicht. Vor der Nutzung mit
'CSSRotate' in windowprüfen und eine Zeichenkette überelement.style.transformals Rückfall vorsehen. - Nicht die Einzeleigenschaft
rotate:CSSRotatesteht für die Funktionrotate()innerhalb vontransform. Für die eigenständige CSS-Eigenschaftrotateist es nicht gedacht. - Einheiten werden geprüft:
anglemuss eine Winkeleinheit haben.x,yundzmüssen einheitenlos sein. Sonst wird einTypeErrorgeworfen. Eine reine Zahl als Winkel, etwanew CSSRotate(45), ist ebenfalls ungültig; stattdessenCSS.deg(45)verwenden. - Nur 1 oder 4 Argumente: Bei 2 oder 3 Argumenten wird der Aufruf nicht als 3D-Drehung gelesen, sondern schlägt fehl.
is2Dumschalten: Wirdis2Dnachträglich auftruegesetzt, ignoriert die Ausgabe (toString(),toMatrix()) die Achsex/y/z.- Ein
CSSRotateallein kann nicht anattributeStyleMap.set()übergeben werden. Es muss in einemCSSTransformValuestecken.