Start · Sprachen · JavaScript · Referenz · Touch.rotationAngle

Touch.rotationAngle

Eigenschaft

Liefert den Drehwinkel in Grad (0 bis unter 90) der Kontaktellipse, die durch <code>Touch.radiusX</code> und <code>Touch.radiusY</code> beschrieben wird.

seit JavaScript Baseline: Chrome, Edge, Firefox (Android), Safari Kategorie: webapi

Signatur

Touch.rotationAngle

Beschreibung

Die schreibgeschützte Eigenschaft rotationAngle eines Touch-Objekts gibt an, um wie viele Grad die Ellipse gedreht ist, die die Kontaktfläche des Fingers oder Stifts auf dem Bildschirm annähert. Gemeinsam mit radiusX und radiusY beschreibt sie Form und Ausrichtung dieser Fläche.

Laut Spezifikation liegt der Wert im Bereich 0 bis unter 90 Grad und wird im Uhrzeigersinn gemessen. Weil eine Ellipse punktsymmetrisch ist, reicht dieser Bereich aus: Größere Drehungen lassen sich durch Vertauschen von radiusX und radiusY ausdrücken.

Einsetzen lässt sich die Eigenschaft z. B. in Zeichen-Apps (Pinselform passend zur Fingerauflage), zur Visualisierung von Berührungen oder für Heuristiken wie „Daumen oder Fingerspitze?“. Man liest sie in Handlern für touchstart, touchmove und touchend aus den Listen event.touches, event.changedTouches oder event.targetTouches aus.

Beispiele

Drehwinkel bei touchstart protokollieren

const area = document.querySelector('#touch-area');

area.addEventListener('touchstart', (event) => {
  for (const touch of event.changedTouches) {
    console.log(
      `Touch ${touch.identifier}: ${touch.radiusX.toFixed(1)} × ${touch.radiusY.toFixed(1)} px, ` +
      `Winkel ${touch.rotationAngle.toFixed(1)}°`
    );
  }
}, { passive: true });
Touch 0: 11.5 × 9.0 px, Winkel 32.0°

Kontaktellipse als Element sichtbar machen

const markers = new Map();

const updateMarker = (touch) => {
  let el = markers.get(touch.identifier);
  if (!el) {
    el = document.createElement('div');
    el.className = 'touch-marker'; // Stil per CSS: position:absolute; border-radius:50%
    document.body.append(el);
    markers.set(touch.identifier, el);
  }
  // Fallback, falls das Gerät keine Radien liefert
  const rx = touch.radiusX || 20;
  const ry = touch.radiusY || 20;
  el.style.width = `${rx * 2}px`;
  el.style.height = `${ry * 2}px`;
  el.style.left = `${touch.pageX - rx}px`;
  el.style.top = `${touch.pageY - ry}px`;
  el.style.transform = `rotate(${touch.rotationAngle}deg)`;
};

const removeMarker = (touch) => {
  markers.get(touch.identifier)?.remove();
  markers.delete(touch.identifier);
};

document.addEventListener('touchstart', (e) => [...e.changedTouches].forEach(updateMarker), { passive: true });
document.addEventListener('touchmove', (e) => [...e.changedTouches].forEach(updateMarker), { passive: true });
document.addEventListener('touchend', (e) => [...e.changedTouches].forEach(removeMarker));
document.addEventListener('touchcancel', (e) => [...e.changedTouches].forEach(removeMarker));

Auf Unterstützung prüfen

const supportsRotation = typeof Touch !== 'undefined' && 'rotationAngle' in Touch.prototype;
console.log(supportsRotation ? 'rotationAngle verfügbar' : 'rotationAngle nicht verfügbar');
rotationAngle verfügbar

// Wichtig · Fallstricke

  • Hardwareabhängig: Viele Geräte und Treiber melden keine Ausrichtung. Dann ist der Wert dauerhaft 0. Ein Wert von 0 heißt also nicht zwingend, dass die Ellipse wirklich nicht gedreht ist.
  • Wertebereich: Einige ältere Implementierungen haben Werte außerhalb von 0–90° geliefert. Wer den Wert weiterverarbeitet, sollte ihn z. B. mit ((angle % 90) + 90) % 90 normalisieren.
  • Präfixe: Ältere WebKit-/Blink-Versionen kannten nur webkitRotationAngle. Auf Desktop-Browsern ohne Touch-Unterstützung gibt es das Interface Touch unter Umständen gar nicht.
  • Alternative: Die Pointer Events API (PointerEvent.twist, width, height) ist geräteübergreifend besser unterstützt und für neue Projekte meist die bessere Wahl.
  • Die Eigenschaft ist schreibgeschützt. Eigene Werte lassen sich nur beim Erzeugen per new Touch({ ..., rotationAngle }) setzen, zum Beispiel für Tests.