Signatur
Beschreibung
CSSRotate gehört zur CSS Typed Object Model API (Houdini). Ein Objekt dieses Typs steht für eine einzelne Rotationsfunktion innerhalb einer transform-Eigenschaft, also rotate(45deg) oder rotate3d(1, 0, 0, 90deg). Mehrere solcher Bausteine werden in einem CSSTransformValue gesammelt. Diesen Wert setzt oder liest man dann über element.attributeStyleMap bzw. element.computedStyleMap().
Der Konstruktor hat zwei Formen: new CSSRotate(angle) erzeugt eine 2D-Drehung um die Z-Achse (x = 0, y = 0, z = 1, is2D = true). new CSSRotate(x, y, z, angle) erzeugt eine 3D-Drehung um den Vektor (x, y, z). Die Eigenschaften x, y, z (Zahlen bzw. CSSNumericValue vom Typ Zahl) und angle (CSSNumericValue vom Typ Winkel) lassen sich nachträglich lesen und ändern.
Von CSSTransformComponent erbt CSSRotate die Eigenschaft is2D sowie die Methoden toMatrix() (liefert eine DOMMatrix) und toString() (liefert die CSS-Schreibweise). Der Vorteil gegenüber dem Zusammenbauen von Strings: Man muss keine Strings parsen, es entstehen weniger Fehler, und man kann gezielt z. B. nur den Winkel einer bestehenden Transformation ändern. Das ist bei Animationen per JavaScript nützlich.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x | number | CSSNumericValue | 0 | X-Komponente des Drehachsen-Vektors. Nur bei der 4-Argument-Form; muss eine einheitenlose Zahl sein. |
| $y | number | CSSNumericValue | 0 | Y-Komponente des Drehachsen-Vektors. Nur bei der 4-Argument-Form. |
| $z | number | CSSNumericValue | 1 | Z-Komponente des Drehachsen-Vektors. Nur bei der 4-Argument-Form. |
| $angle Pflicht | CSSNumericValue | Drehwinkel, z. B. CSS.deg(45), CSS.rad(1) oder CSS.turn(0.25). Muss vom Typ Winkel sein, sonst wird ein TypeError ausgelöst. |
Rückgabewert
CSSRotate-Objekt mit den Eigenschaften x, y, z, angle und is2D.Beispiele
2D- und 3D-Rotation erzeugen
// 2D: Drehung um die Z-Achse
const rot2d = new CSSRotate(CSS.deg(45));
console.log(rot2d.toString(), rot2d.is2D);
// 3D: Drehung um die X-Achse
const rot3d = new CSSRotate(1, 0, 0, CSS.deg(90));
console.log(rot3d.toString(), rot3d.is2D);
Rotation per attributeStyleMap auf ein Element anwenden
const box = document.querySelector('.box');
const transform = new CSSTransformValue([
new CSSTranslate(CSS.px(20), CSS.px(0)),
new CSSRotate(CSS.turn(0.25))
]);
box.attributeStyleMap.set('transform', transform);
console.log(box.style.transform);
Winkel einer bestehenden Transformation auslesen und animieren
const el = document.querySelector('.spinner');
el.style.transform = 'rotate(30deg) scale(1.2)';
const value = el.attributeStyleMap.get('transform');
const rotation = [...value].find((c) => c instanceof CSSRotate);
console.log(rotation.angle.value, rotation.angle.unit);
// Nur den Winkel hochzählen, ohne Strings zu parsen
const tick = () => {
rotation.angle = CSS.deg((rotation.angle.value + 2) % 360);
el.attributeStyleMap.set('transform', value);
requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
In eine DOMMatrix umwandeln
const rot = new CSSRotate(CSS.deg(90));
const m = rot.toMatrix();
console.log(m.is2D, Math.round(m.a), Math.round(m.b));
// Wichtig · Fallstricke
- Browser-Unterstützung: Das CSS Typed OM gibt es in Chromium-Browsern (ab 66) und in Safari (ab 16.4). Firefox unterstützt es nicht. Prüfen Sie die Verfügbarkeit mit
if ('CSSRotate' in window)und greifen Sie sonst aufelement.style.transformmit Strings zurück. anglemuss ein Winkel-Wert sein (deg,rad,grad,turn). Eine einfache Zahl oderCSS.px()löst einenTypeErroraus. Umgekehrt müssenx,yundzeinheitenlos sein.- Eine Änderung am
CSSRotate-Objekt wirkt sich nicht automatisch auf das Element aus. Den geändertenCSSTransformValuemüssen Sie erneut mitattributeStyleMap.set()zuweisen. - Wenn Sie
is2Dmanuell auftruesetzen, gibttoString()nurrotate(angle)aus. Die Achsenwerte fallen dann weg. - Die berechnete Transformation (
computedStyleMap()) kann je nach Browser anders aussehen als die angegebenen Funktionen. Wenn Sie gezielt nachCSSRotate-Bausteinen suchen, lesen Sie lieberattributeStyleMap. - Nicht verwechseln mit der eigenständigen CSS-Eigenschaft
rotate.CSSRotatebildet nur Funktionen innerhalb vontransformab.