Start · Sprachen · JavaScript · Referenz · PointerEvent.tangentialPressure

PointerEvent.tangentialPressure

Eigenschaft

Schreibgeschützte Eigenschaft, die den normalisierten tangentialen Druck (Fassdruck) eines Zeigergeräts als Zahl im Bereich <code>-1</code> bis <code>1</code> liefert.

seit JavaScript Pointer Events Level 2 – Baseline: alle modernen B Kategorie: webapi

Signatur

PointerEvent.tangentialPressure

Beschreibung

tangentialPressure gibt den tangentialen Druck eines Eingabegeräts an, auch Fassdruck oder Zylinderbelastung genannt. Gemeint ist ein zusätzlicher Regler am Gehäuse eines Stifts, etwa das Fingerrad am Airbrush-Stift von Wacom. Das ist nicht der Druck der Stiftspitze auf die Oberfläche; dafür gibt es PointerEvent.pressure.

Der Wert ist eine Gleitkommazahl im Bereich -1 bis 1. 0 ist die neutrale Stellung des Reglers. Kann die Hardware keinen tangentialen Druck melden, ist der Wert immer 0. Das gilt für Maus, Touch und die meisten normalen Stifte.

Nützlich ist die Eigenschaft vor allem in Zeichen- und Malprogrammen im Browser. Dort kann man mit dem Fassdruck eine zweite Größe steuern, zum Beispiel die Sprühmenge, die Deckkraft oder die Pinselhärte. Die Pinselbreite steuert man weiter über pressure. Werte die Eigenschaft am besten in pointerdown- und pointermove-Handlern aus. Bei häufigen Bewegungen liefert getCoalescedEvents() zusätzliche Zwischenwerte.

Rückgabewert

Typ
number
Beschreibung
Normalisierter tangentialer Druck zwischen -1 und 1. 0 ist die neutrale Stellung und auch der Wert, wenn die Hardware keinen Fassdruck unterstützt.

Beispiele

Fassdruck beim Zeichnen protokollieren

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

canvas.addEventListener('pointermove', (event) => {
  if (event.pointerType !== 'pen') return;
  console.log(
    `Spitze: ${event.pressure.toFixed(2)}, Fass: ${event.tangentialPressure.toFixed(2)}`
  );
});
Spitze: 0.47, Fass: -0.25

Airbrush: Deckkraft über den Fassdruck steuern

const canvas = document.querySelector('#leinwand');
const ctx = canvas.getContext('2d');

// Bereich -1 … 1 auf die Deckkraft 0.05 … 1 abbilden
const toAlpha = (tp) => 0.05 + ((tp + 1) / 2) * 0.95;

canvas.addEventListener('pointermove', (event) => {
  if (event.buttons !== 1) return;
  // Zwischenwerte für flüssige Striche mitnehmen
  const events = event.getCoalescedEvents?.() ?? [event];
  for (const e of events) {
    ctx.globalAlpha = toAlpha(e.tangentialPressure);
    ctx.beginPath();
    ctx.arc(e.offsetX, e.offsetY, 4 + e.pressure * 12, 0, Math.PI * 2);
    ctx.fill();
  }
});

Prüfen, ob das Gerät Fassdruck liefert

let hatFassdruck = false;

const pruefen = (event) => {
  if (event.tangentialPressure !== 0) {
    hatFassdruck = true;
    console.log('Fassdruck-Regler erkannt – Airbrush-Modus aktiv');
    window.removeEventListener('pointermove', pruefen);
  }
};

window.addEventListener('pointermove', pruefen);
Fassdruck-Regler erkannt – Airbrush-Modus aktiv

Synthetisches PointerEvent mit tangentialPressure (z. B. für Tests)

const target = document.body;
target.addEventListener('pointerdown', (e) => {
  console.log(e.pointerType, e.tangentialPressure);
});

target.dispatchEvent(new PointerEvent('pointerdown', {
  pointerType: 'pen',
  pressure: 0.5,
  tangentialPressure: 0.3,
  bubbles: true
}));
pen 0.30000001192092896

// Wichtig · Fallstricke

  • Nicht mit pressure verwechseln: pressure misst den Druck der Spitze und liegt zwischen 0 und 1. tangentialPressure misst einen Regler am Gehäuse und liegt zwischen -1 und 1.
  • Hardwareabhängig: Nur wenige Geräte liefern Werte ungleich 0, zum Beispiel der Wacom-Airbrush-Stift. Wird kein Wert gemeldet, sieht das genauso aus wie ein Regler in neutraler Stellung. Einen verlässlichen Weg, beide Fälle zu unterscheiden, gibt es nicht.
  • Treiber und Betriebssystem: Ob der Wert beim Browser ankommt, hängt auch vom Tablet-Treiber ab, unter Windows etwa Windows Ink oder WinTab. Unter Linux und auf Mobilgeräten ist der Wert meist immer 0.
  • Die Eigenschaft ist schreibgeschützt. Bei synthetischen Events legt man den Wert über das PointerEventInit-Wörterbuch fest. Der Wert wird dabei als 32-Bit-Gleitkommazahl gespeichert, deshalb können Rundungsabweichungen entstehen.
  • Browserunterstützung: Chrome/Edge ab 58, Firefox ab 59, Safari ab 13. In älteren Browsern ist der Wert undefined. Ein defensiver Zugriff sieht so aus: event.tangentialPressure ?? 0.