Signatur
Beschreibung
Das Ereignis pointerout gehört zu den Pointer Events und ist das zeigerunabhängige Gegenstück zu mouseout. Es wird ausgelöst, wenn:
- der Zeiger (Maus, Stift, Finger) den Trefferbereich (Hit-Test) eines Elements verlässt – auch beim Wechsel in ein Kindelement,
- nach
pointerupbei Geräten ohne Hover-Unterstützung (z. B. Touch), weil der Zeiger danach „verschwindet“, - nach
pointercancel, etwa wenn der Browser eine Touch-Geste für Scrollen übernimmt, - ein Stift den Erkennungsbereich des Digitalisierers verlässt.
Im Gegensatz zu pointerleave blubbert pointerout (bubbles: true) und ist abbrechbar. Dadurch eignet es sich gut für Event-Delegation: Ein einziger Listener auf einem Container reicht aus, um das Verlassen beliebig vieler Kindelemente zu verarbeiten. Über event.relatedTarget erfahren Sie, welches Element der Zeiger betreten hat (oder null, wenn er das Dokument verlassen hat).
Der Handler erhält ein PointerEvent-Objekt mit Eigenschaften wie pointerId, pointerType ("mouse", "pen", "touch"), clientX/clientY und relatedTarget. Alternativ lässt sich der Handler über die Eigenschaft element.onpointerout zuweisen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname "pointerout". |
|
| $handler Pflicht | (event: PointerEvent) => void | EventListenerObject | Callback, der bei jedem Auslösen mit einem PointerEvent aufgerufen wird. |
|
| $options | boolean | AddEventListenerOptions | false | Optionen wie capture, once, passive oder signal (zum Entfernen per AbortController). |
Rückgabewert
addEventListener liefert undefined. Der Handler erhält ein PointerEvent.Beispiele
Hervorhebung per addEventListener entfernen
const card = document.querySelector('.card');
card.addEventListener('pointerover', () => card.classList.add('aktiv'));
card.addEventListener('pointerout', (event) => {
// Wechsel in ein Kindelement ignorieren
if (card.contains(event.relatedTarget)) return;
card.classList.remove('aktiv');
console.log(`Verlassen mit: ${event.pointerType}`);
});
Event-Delegation für Tabellenzeilen
const tbody = document.querySelector('#daten tbody');
tbody.addEventListener('pointerout', (event) => {
const row = event.target.closest('tr');
if (!row || row.contains(event.relatedTarget)) return;
row.classList.remove('hover');
console.log(`Zeile ${row.rowIndex} verlassen`);
});
on-Property und Entfernen des Listeners
const button = document.querySelector('#hilfe');
const tooltip = document.querySelector('#tooltip');
// Variante 1: on-Property
button.onpointerout = () => { tooltip.hidden = true; };
// Variante 2: benannter Handler, später wieder entfernen
const hideTooltip = () => { tooltip.hidden = true; };
button.addEventListener('pointerout', hideTooltip);
// Später, z. B. beim Deaktivieren der Komponente:
button.removeEventListener('pointerout', hideTooltip);
button.onpointerout = null;
Entfernen per AbortController
const controller = new AbortController();
const area = document.querySelector('.zeichenflaeche');
area.addEventListener('pointerout', (e) => {
console.log('Zeiger', e.pointerId, 'hat die Fläche verlassen');
}, { signal: controller.signal });
// Alle mit diesem Signal registrierten Listener entfernen
controller.abort();
// Wichtig · Fallstricke
- Blubbern:
pointeroutfeuert auch, wenn der Zeiger vom Element in ein Kindelement wechselt. Wer nur das echte Verlassen erkennen will, prüftelement.contains(event.relatedTarget)oder verwendetpointerleave. - Touch-Geräte: Nach jedem
pointerupfolgt sofortpointeroutundpointerleave, da es keinen Hover-Zustand gibt. Hover-Logik sollte daherevent.pointerTypeberücksichtigen. - Pointer Capture: Solange per
setPointerCapture()ein Zeiger gebunden ist, wirdpointerouterst nachlostpointercapturean andere Elemente ausgelöst. - Scroll-Gesten: Übernimmt der Browser eine Touch-Geste (
pointercancel), wird ebenfallspointeroutausgelöst; mit CSStouch-action: nonelässt sich das verhindern. - Kompatibilität: In allen aktuellen Browsern unterstützt (Safari ab 13). Für sehr alte Browser ggf. auf
mouseout/touchendzurückfallen. Kompatibilitäts-Mausereignisse (mouseout) werden zusätzlich ausgelöst.