Start · Sprachen · JavaScript · Referenz · PointerEvent.tiltX

PointerEvent.tiltX

Eigenschaft

Schreibgeschützter Neigungswinkel (in Grad, −90 bis 90) zwischen der Y-Z-Ebene des Zeigers (z. B. Stift) und der Y-Z-Ebene des Bildschirms.

seit JavaScript Baseline: alle modernen Browser (seit 2020) Kategorie: webapi

Signatur

PointerEvent.tiltX

Beschreibung

Die Eigenschaft tiltX des PointerEvent-Interfaces gibt an, wie stark ein Zeigegerät, in der Regel ein Stift auf einem Grafiktablett oder Touchscreen, entlang der X-Achse geneigt ist. Der Wert ist eine Ganzzahl in Grad im Bereich -90 bis 90. Gemessen wird der Winkel zwischen der Y-Z-Ebene, in der die Stiftachse und die Y-Achse des Bildschirms liegen, und der Y-Z-Ebene des Bildschirms. Ein positiver Wert bedeutet, dass der Stift nach rechts geneigt ist, also in Richtung wachsender X-Werte.

Zusammen mit tiltY beschreibt tiltX die räumliche Ausrichtung des Stifts. Das nutzt man vor allem in Zeichen- und Malprogrammen, um Pinselspitzen realistisch zu formen (z. B. Kalligrafie- oder Bleistiftschattierung), Schattenrichtungen zu berechnen oder Neigungsgesten zu erkennen.

Unterstützt das Gerät keine Neigungserkennung, etwa bei Maus oder Fingerberührung, ist der Wert 0. Welches Gerät das Ereignis ausgelöst hat, erfährt man über pointerType ("pen", "mouse", "touch"). Alternativ zu tiltX/tiltY gibt es die Winkelangaben altitudeAngle und azimuthAngle im Bogenmaß. Browser rechnen zwischen beiden Darstellungen automatisch um.

Rückgabewert

Typ
number
Beschreibung
Ganzzahl in Grad im Bereich -90 bis 90. 0 bedeutet senkrecht zur X-Achse oder keine Neigungsunterstützung.

Beispiele

Neigung eines Stifts auslesen

const canvas = document.querySelector('#zeichenflaeche');

canvas.addEventListener('pointermove', (event) => {
  if (event.pointerType !== 'pen') return;
  console.log(`tiltX: ${event.tiltX}°, tiltY: ${event.tiltY}°`);
});
tiltX: 23°, tiltY: -12°

Pinselbreite abhängig von der Neigung (Canvas)

const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
canvas.style.touchAction = 'none'; // Scrollen/Gesten beim Zeichnen verhindern

canvas.addEventListener('pointermove', (e) => {
  if (e.buttons !== 1) return;
  // Je stärker geneigt, desto breiter der Strich (1–20 px)
  const neigung = Math.hypot(e.tiltX, e.tiltY); // 0 … ~127
  const breite = 1 + Math.min(neigung, 90) / 90 * 19;
  const druck = e.pressure || 0.5;

  ctx.beginPath();
  ctx.ellipse(e.offsetX, e.offsetY, breite * druck, 2, 0, 0, Math.PI * 2);
  ctx.fill();
});

Neigungsrichtung als Winkel berechnen und Handler entfernen

const richtungAusTilt = (tiltX, tiltY) => {
  if (tiltX === 0 && tiltY === 0) return null; // senkrecht oder nicht unterstützt
  const rad = Math.atan2(Math.tan(tiltY * Math.PI / 180),
                         Math.tan(tiltX * Math.PI / 180));
  return Math.round(rad * 180 / Math.PI);
};

const handler = (e) => {
  console.log('Richtung:', richtungAusTilt(e.tiltX, e.tiltY));
};

document.addEventListener('pointerdown', handler);
// Später wieder abmelden:
// document.removeEventListener('pointerdown', handler);
Richtung: 45

// Wichtig · Fallstricke

  • Nur Stifte liefern echte Werte: Bei Maus und Touch ist tiltX praktisch immer 0. Auch viele Stifte bzw. Treiber melden keine Neigung. Eine 0 kann also „senkrecht“ oder „nicht unterstützt“ bedeuten.
  • Schreibgeschützt: Zuweisungen haben keine Wirkung. Für synthetische Ereignisse setzt man den Wert über den Konstruktor: new PointerEvent('pointermove', { tiltX: 30 }).
  • Die Werte sind ganzzahlig und damit relativ grob. Für feinere Berechnungen eignen sich altitudeAngle/azimuthAngle besser, sofern der Browser sie anbietet (Chrome/Edge, Safari; in Firefox eingeschränkt).
  • Beim Zeichnen touch-action: none setzen, sonst übernimmt der Browser Stift-/Touch-Gesten zum Scrollen und löst pointercancel aus.
  • Für Zwischenwerte bei schnellen Bewegungen getCoalescedEvents() verwenden. Jedes zusammengefasste Ereignis hat einen eigenen tiltX-Wert.
  • Browser-Kompatibilität: Chrome, Edge, Firefox und Safari (ab 13) unterstützen die Eigenschaft. Ob echte Werte ankommen, hängt von Hardware und Betriebssystem-Treiber ab.