Start · Sprachen · JavaScript · Referenz · PointerEvent.height

PointerEvent.height

Eigenschaft

Schreibgeschützte Eigenschaft mit der Höhe der Kontaktfläche des Zeigers entlang der y-Achse in CSS-Pixeln (<code>double</code>).

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

Signatur

PointerEvent.height

Beschreibung

PointerEvent.height liefert die Höhe der Kontaktgeometrie, mit der ein Zeiger die Oberfläche berührt, in CSS-Pixeln. Zusammen mit PointerEvent.width beschreibt der Wert ein Rechteck um den Punkt clientX/clientY. Er ist bei Touch-Eingaben besonders nützlich, weil ein Finger keinen einzelnen Punkt trifft, sondern eine Fläche.

Typische Einsatzfälle sind Zeichen- und Mal-Anwendungen (Pinselgröße anhand der Fingerfläche), Handballenerkennung (palm rejection: sehr große Kontaktflächen werden verworfen) sowie Trefferprüfung für kleine Bedienelemente, bei der die Kontaktfläche statt eines einzelnen Punkts ausgewertet wird.

Kann die Hardware die Kontaktgeometrie nicht ermitteln, etwa bei Maus oder vielen Stiften, liefert der Browser laut Spezifikation den Standardwert 1. Den Zeigertyp prüft man über pointerType. So verhindert man, dass dieser Standardwert als echte Messung gewertet wird.

Rückgabewert

Typ
number
Beschreibung
Höhe der Kontaktfläche in CSS-Pixeln als Gleitkommazahl (double). Hat das Gerät keine Kontaktgeometrie, ist der Wert 1.

Beispiele

Kontaktfläche beim Berühren ausgeben

const pad = document.querySelector('#pad');

pad.addEventListener('pointerdown', (event) => {
  console.log(`${event.pointerType}: ${event.width.toFixed(1)} × ${event.height.toFixed(1)} px`);
});
touch: 23.0 × 27.5 px mouse: 1.0 × 1.0 px

Pinselgröße aus der Fingerfläche ableiten

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

canvas.addEventListener('pointermove', (event) => {
  if (event.buttons === 0) return;
  const rect = canvas.getBoundingClientRect();
  // Bei Maus/Stift ohne Geometrie ist height 1 -> Druck als Ersatz nutzen
  const size = event.pointerType === 'touch'
    ? Math.max(event.width, event.height) / 2
    : 2 + event.pressure * 8;
  ctx.beginPath();
  ctx.arc(event.clientX - rect.left, event.clientY - rect.top, size, 0, Math.PI * 2);
  ctx.fill();
});

Handballen-Erkennung (Palm Rejection)

const MAX_FINGER_SIZE = 40; // CSS-Pixel, Schwellwert empirisch wählen

const onDown = (event) => {
  if (event.pointerType === 'touch' && event.height > MAX_FINGER_SIZE) {
    console.log('Kontakt ignoriert – vermutlich Handballen');
    return;
  }
  console.log('Gültiger Kontakt bei', event.clientX, event.clientY);
};

document.addEventListener('pointerdown', onDown);
// Später wieder entfernen:
// document.removeEventListener('pointerdown', onDown);
Kontakt ignoriert – vermutlich Handballen

Kontaktrechteck berechnen

const getContactRect = ({ clientX, clientY, width, height }) => ({
  left: clientX - width / 2,
  top: clientY - height / 2,
  right: clientX + width / 2,
  bottom: clientY + height / 2,
});

document.addEventListener('pointerdown', (event) => {
  console.log(getContactRect(event));
});
{ left: 88.5, top: 186.25, right: 111.5, bottom: 213.75 }

// Wichtig · Fallstricke

  • Standardwert 1: Maus, viele Stifte und Touchscreens ohne Flächenmessung melden 1. Den Wert immer zusammen mit pointerType auswerten.
  • Nur lesbar: Eine Zuweisung hat keine Wirkung. Für synthetische Ereignisse setzt man height im Konstruktor: new PointerEvent('pointerdown', { width: 20, height: 30 }).
  • Geräteabhängig: Genauigkeit und Wertebereich hängen stark von Hardware und Betriebssystem ab. Manche Geräte melden feste oder gerundete Werte. Schwellwerte sollte man daher auf echten Geräten prüfen.
  • CSS-Pixel: Der Wert berücksichtigt Zoom und devicePixelRatio. Für physische Pixel mit window.devicePixelRatio multiplizieren.
  • Kompatibilität: Unterstützt von Chrome, Edge, Firefox und Safari (ab 13). Das ältere Touch.radiusY ist eine Alternative für die Touch Events API.