Start · Sprachen · JavaScript · Referenz · Touch.identifier

Touch.identifier

Eigenschaft

Liefert eine Ganzzahl, die einen Berührungspunkt während der gesamten Dauer seines Kontakts mit der Oberfläche eindeutig identifiziert.

seit JavaScript Baseline: alle modernen Browser (Touch Events Leve Kategorie: webapi

Signatur

Touch.identifier

Beschreibung

Die schreibgeschützte Eigenschaft Touch.identifier gibt eine Zahl zurück, die einen bestimmten Berührungspunkt (z. B. einen Finger) eindeutig kennzeichnet. Der Wert bleibt gleich, solange der Kontakt besteht: vom touchstart über alle touchmove-Ereignisse bis zum touchend bzw. touchcancel.

Gebraucht wird die Eigenschaft vor allem bei Multi-Touch. Die Listen TouchEvent.touches, targetTouches und changedTouches haben keine feste Reihenfolge. Die Position eines Fingers in der Liste sagt also nichts darüber aus, um welchen Finger es sich handelt. Über identifier ordnest du jede Bewegung dem richtigen Finger zu, etwa beim Zeichnen mit mehreren Fingern, bei Pinch-Gesten oder bei virtuellen Joysticks in Spielen.

Mit TouchList.prototype.identifiedTouch() (veraltet, kaum unterstützt) oder einfacher durch Suchen in der Liste per Array.from(list).find(t => t.identifier === id) findest du einen bestimmten Berührungspunkt wieder.

Rückgabewert

Typ
number
Beschreibung
Eine Ganzzahl, die den Berührungspunkt eindeutig kennzeichnet, solange der Kontakt besteht. Der konkrete Wert ist browserabhängig und hat keine feste Bedeutung.

Beispiele

Finger beim Start erfassen

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

flaeche.addEventListener('touchstart', (event) => {
  for (const touch of event.changedTouches) {
    console.log(`Neuer Finger: ID ${touch.identifier} bei (${touch.clientX}, ${touch.clientY})`);
  }
}, { passive: true });
Neuer Finger: ID 0 bei (120, 340) Neuer Finger: ID 1 bei (260, 310)

Multi-Touch-Zeichnen: jeden Finger einzeln verfolgen

const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const aktiveFinger = new Map(); // identifier -> letzte Position

canvas.addEventListener('touchstart', (e) => {
  e.preventDefault();
  for (const t of e.changedTouches) {
    aktiveFinger.set(t.identifier, { x: t.clientX, y: t.clientY });
  }
}, { passive: false });

canvas.addEventListener('touchmove', (e) => {
  e.preventDefault();
  for (const t of e.changedTouches) {
    const letzte = aktiveFinger.get(t.identifier);
    if (!letzte) continue;
    ctx.beginPath();
    ctx.moveTo(letzte.x, letzte.y);
    ctx.lineTo(t.clientX, t.clientY);
    ctx.stroke();
    aktiveFinger.set(t.identifier, { x: t.clientX, y: t.clientY });
  }
}, { passive: false });

const beenden = (e) => {
  for (const t of e.changedTouches) aktiveFinger.delete(t.identifier);
};
canvas.addEventListener('touchend', beenden);
canvas.addEventListener('touchcancel', beenden);

Einen bestimmten Finger in der TouchList wiederfinden

let joystickFinger = null;
const joystick = document.querySelector('#joystick');

joystick.addEventListener('touchstart', (e) => {
  if (joystickFinger === null) {
    joystickFinger = e.changedTouches[0].identifier;
  }
}, { passive: true });

document.addEventListener('touchmove', (e) => {
  const touch = Array.from(e.touches).find((t) => t.identifier === joystickFinger);
  if (touch) {
    console.log(`Joystick-Finger bei x=${touch.pageX}`);
  }
}, { passive: true });

document.addEventListener('touchend', (e) => {
  const beendet = Array.from(e.changedTouches).some((t) => t.identifier === joystickFinger);
  if (beendet) joystickFinger = null;
});
Joystick-Finger bei x=184

// Wichtig · Fallstricke

  • Keine Indizes: Die IDs beginnen nicht zwingend bei 0 und laufen nicht zwingend fortlaufend. Safari (iOS) vergibt z. B. große, scheinbar zufällige Zahlen. Verwende identifier deshalb nie als Array-Index, sondern als Schlüssel in einer Map oder in einem Objekt.
  • Wiederverwendung: Nach touchend/touchcancel kann der Browser dieselbe ID für einen neuen Finger vergeben. Entferne beendete IDs daher immer aus deinem Zustand und behandle auch touchcancel.
  • Reihenfolge: Die Reihenfolge in TouchLists ist nicht garantiert. Identifiziere Finger deshalb immer über identifier, nie über die Position in der Liste.
  • Kompatibilität: Touch Events gibt es in allen mobilen Browsern und in Chromium-Browsern auf Touch-Geräten. Desktop-Firefox und Desktop-Safari stellen sie ohne Touch-Hardware meist nicht bereit. Für geräteübergreifenden Code bieten sich Pointer Events mit PointerEvent.pointerId an, das Gleiche für Maus, Stift und Touch.