Signatur
Beschreibung
Der Konstruktor PointerEvent() erzeugt ein Zeigerereignis in Ihrem eigenen Code. Pointer Events fassen Maus, Stift und Touch in einem gemeinsamen Ereignismodell zusammen. Ein selbst erzeugtes Ereignis kann Werte wie pointerId, pointerType, pressure, width/height oder die Neigungswinkel des Stifts enthalten.
Man verwendet den Konstruktor vor allem für automatisierte Tests von Zeichen-, Drag-and-Drop- oder Gestenlogik, für Simulationen (z. B. ein Tutorial, das eine Eingabe vorführt) und um Eingaben einer eigenen Komponente an andere Teile der Anwendung weiterzuleiten.
Das erzeugte Ereignis ist unzuverlässig (event.isTrusted === false). Der Browser führt dafür keine Standardaktionen aus. Es gibt also kein Scrollen, keinen Fokuswechsel, keine Textauswahl, und es wird kein click daraus erzeugt. Auch Funktionen, die eine echte Nutzerinteraktion voraussetzen (Vollbild, Pop-ups, Zwischenablage), werden dadurch nicht freigeschaltet. Das Ereignis wird erst mit element.dispatchEvent(event) ausgelöst, und zwar synchron.
PointerEvent erbt von MouseEvent. Deshalb akzeptiert options auch alle Felder aus MouseEventInit (clientX, clientY, button, buttons, ctrlKey …) und EventInit (bubbles, cancelable, composed).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, z. B. "pointerdown", "pointermove", "pointerup", "pointercancel", "pointerover", "pointerenter", "pointerleave", "gotpointercapture". |
|
| $options | PointerEventInit | {} | Optionales Objekt mit Startwerten. Zusätzlich zu den Feldern von MouseEventInit/EventInit möglich:
|
Rückgabewert
PointerEvent-Objekt mit isTrusted === false. Es wird erst ausgelöst, wenn es an dispatchEvent() übergeben wird.Beispiele
Stift-Ereignis erzeugen und Eigenschaften prüfen
const event = new PointerEvent('pointerdown', {
pointerId: 7,
pointerType: 'pen',
isPrimary: true,
pressure: 0.6,
tiltX: 15,
clientX: 120,
clientY: 80,
bubbles: true
});
console.log(event.type, event.pointerType, event.pressure);
console.log(event instanceof MouseEvent, event.isTrusted);
Zeichen-Canvas im Test mit einem simulierten Strich ansteuern
const canvas = document.querySelector('canvas');
const points = [];
canvas.addEventListener('pointermove', (e) => {
if (e.buttons & 1) points.push([e.offsetX, e.offsetY, e.pressure]);
});
const rect = canvas.getBoundingClientRect();
const fire = (type, x, y, buttons) =>
canvas.dispatchEvent(new PointerEvent(type, {
pointerId: 1,
pointerType: 'mouse',
isPrimary: true,
clientX: rect.left + x,
clientY: rect.top + y,
buttons,
pressure: buttons ? 0.5 : 0,
bubbles: true
}));
fire('pointerdown', 10, 10, 1);
for (let x = 20; x <= 50; x += 10) fire('pointermove', x, 10, 1);
fire('pointerup', 50, 10, 0);
console.log(points.length);
Echte von synthetischen Ereignissen unterscheiden
const button = document.querySelector('#draw');
const onDown = (e) => {
if (!e.isTrusted) {
console.log('Simuliert:', e.pointerType);
return;
}
console.log('Echte Eingabe');
};
button.addEventListener('pointerdown', onDown);
button.dispatchEvent(new PointerEvent('pointerdown', { pointerType: 'touch' }));
button.removeEventListener('pointerdown', onDown);
// Wichtig · Fallstricke
bubblesist standardmäßigfalse. Ohnebubbles: trueerreicht das Ereignis delegierte Listener an Elternelementen nicht. Echte Pointer-Ereignisse steigen dagegen auf, abgesehen vonpointerenter/pointerleave.- Synthetische Ereignisse lösen keine Folgeereignisse aus. Es entstehen weder kompatible Mausereignisse (
mousedown,mouseup) noch einclick. Die Standardaktion bleibt ebenfalls aus. Wer das braucht, muss diese Ereignisse selbst auslösen. setPointerCapture(pointerId)funktioniert nur mit der ID eines aktiven echten Zeigers. Bei ausgedachten IDs wirft es eineNotFoundError-DOMException.offsetX/offsetYlassen sich nicht direkt setzen. Sie werden beim Auslösen ausclientX/clientYberechnet.- Wird
pressurenicht gesetzt, ist der Wert0, auch wenn Tasten gedrückt sind. Bei echten Mausereignissen mit gedrückter Taste beträgt er0.5. altitudeAngle,azimuthAngle,coalescedEventsundpredictedEventsim Init-Objekt sind neuer und werden nicht in allen Browsern unterstützt.- Kompatibilität: In allen aktuellen Browsern verfügbar (Safari ab 13). In jsdom fehlte
PointerEventlange; dort ist eventuell ein Polyfill oderMouseEventals Ersatz nötig.