The pointerout event fires when a pointer leaves an element—and also at child boundaries (like mouseout). Learn addEventListener vs onpointerout, why pointerleave is often better, bubbling / relatedTarget, and five try-it labs.
01
Kind
Instance event
02
Type
PointerEvent
03
When
Leave + child edges
04
Handler
onpointerout
05
Bubbles?
Yes (like mouseout)
06
Status
Baseline widely available
Fundamentals
Introduction
pointerout answers: “Did the pointer just leave this element (including into a covering child)?” It is the Pointer Events twin of mouseout—and it has the same child-boundary “noise.”
MDN recommends pointerenter / pointerleave for most whole-component hover exit, because they are not affected by moving into child elements. Use pointerout when you want bubbling or per-child leave tracking.
💡
Beginner tip
pointerout also fires after pointerup on devices without hover, after pointercancel, and when a pen leaves digitizer hover range—not only on mouse leave.
Concept
Understanding pointerout
An instance event that answers: “Did the pointer leave this target (or cross a child edge)?”
Hit test leave — pointer moved out of the element.
Child boundaries — also fires when entering/leaving descendants (like mouseout).
Bubbles — unlike pointerleave.
Extra triggers — non-hover pointerup, pointercancel, pen hover-range exit.
Baseline Widely available on MDN (since July 2020).
Foundation
📝 Syntax
Use the event name with addEventListener, or set the handler property:
A PointerEvent (inherits from MouseEvent and Event).
Handy properties
Property
Meaning
target
Element the pointer left
relatedTarget
Element the pointer entered (when available)
pointerId
Unique id for this pointer stream
pointerType
mouse, pen, touch, etc.
clientX / clientY
Pointer position in the viewport
Compare
⚖️ pointerout vs pointerleave
Topic
pointerout
pointerleave
Bubbles?
Yes
No
Child boundaries
Fires when moving among children
Ignored for parent re-fire
Mouse twin
mouseout
mouseleave
Enter twin
pointerover
pointerenter
Best for
Delegation / per-child leave
Whole-component hover exit
MDN’s guidance matches the mouse pair: for most UI hover exit, prefer pointerleave (with pointerenter) over pointerout / pointerover.
Triggers
🔔 When pointerout Fires
Pointer moves out of the element’s hit-test boundaries.
Pointer moves between parent and child (or among siblings)—child noise.
After pointerup on devices that do not support hover.
After pointercancel.
Pen stylus leaves the hover range detectable by the digitizer.
Touch detail
🤳 Implicit Capture & Touch
On touchscreen browsers that allow direct manipulation, pointerdown can trigger implicit pointer capture. While capture is set, boundary events may be suppressed:
pointerover, pointerenter, pointerleave, and pointerout may not fire as expected.
Capture ends on pointerup / pointercancel, or when you call releasePointerCapture().
Cheat Sheet
⚡ Quick Reference
Goal
Code / note
Listen
el.addEventListener("pointerout", fn)
Handler property
el.onpointerout = fn
Stable hover exit
Prefer pointerleave
Enter twin
pointerover
Where went?
event.relatedTarget
MDN status
Baseline Widely available (Jul 2020)
Snapshot
🔍 At a Glance
Four facts to remember about pointerout.
Event type
PointerEvent
MouseEvent + more
Means
left target
Incl. child edges
Bubbles
true
Like mouseout
Baseline
yes
Since Jul 2020
Hands-On
Examples Gallery
Examples follow MDN Element: pointerout event. Move a mouse or pen onto the stage, then leave it (or move among children).
📚 Getting Started
MDN listener patterns and the handler property.
Example 1 — Log pointerout (MDN)
Fire when the pointer moves out of the paragraph.
JavaScript
const para = document.querySelector("p");
const out = document.getElementById("out");
para.addEventListener("pointerout", (event) => {
out.textContent = "Pointer moved out";
});
pointerout is marked Baseline Widely available on MDN (since July 2020). Logos use the shared browser-image-sprite.png sprite from this project. Pointer Events unify mouse, touch, and pen across modern engines.
✓ Baseline · Widely available
Element pointerout
Bubbling leave event with child-boundary noise; prefer pointerleave for whole-component hover exit.
FullWidely available
Google ChromeFull support
Yes
Mozilla FirefoxFull support
Yes
Apple SafariFull support
Yes
Microsoft EdgeFull support
Yes
OperaFull support
Yes
Internet ExplorerPointer Events (legacy IE11 path)
Partial
pointeroutBaseline
Bottom line: Use pointerout for delegation or per-child leave. Prefer pointerleave when child noise is unwanted.
Wrap Up
Conclusion
pointerout is the unified bubbling “left this target” signal—useful for delegation, noisy at child edges. For stable whole-component hover exit, prefer pointerleave.
Prefer pointerleave for whole-component hover exit
Use pointerout when you need bubbling / per-child leave
Read relatedTarget to see where the pointer went
Remember the mouse twin: mouseout
Account for implicit touch capture during active contact
❌ Don’t
Expect quiet whole-card hover with pointerout alone
Ignore child-boundary flicker on nested UIs
Confuse it with non-bubbling pointerleave
Assume enter/leave/out will fire during every touch drag
Overwrite onpointerout if you need multiple listeners
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about pointerout
Bubbling leave with child noise—prefer pointerleave for quiet hover exit.
5
Core concepts
📱01
On out
leave + child edges
Trigger
📄02
PointerEvent
relatedTarget · id
API
⇄03
vs leave
bubbles / child noise
Compare
💡04
Prefer
pointerleave often
Pattern
🎯05
Baseline
since Jul 2020
Status
❓ Frequently Asked Questions
It fires when a pointer leaves an element’s hit-test area, when pointerup fires on devices without hover, after pointercancel, or when a pen leaves digitizer hover range. It also fires when moving among child boundaries.
No. MDN marks Element pointerout as Baseline Widely available (since July 2020). It is not Deprecated, Experimental, or Non-standard.
A PointerEvent (inherits from MouseEvent and Event). Useful fields include pointerId, pointerType, relatedTarget, clientX, and clientY.
pointerout bubbles and also fires when moving from a parent into a child (or among child boundaries). pointerleave does not bubble and fires only when leaving the element and all descendants.
For whole-component hover exit without descendant noise, MDN notes pointerenter / pointerleave are usually more sensible than pointerover / pointerout.
When you want bubbling/delegation, or when you care about leaving individual children (for example highlighting each list item as the pointer exits it).
Did you know?
Spec tables list pointerout as bubbling and cancelable (unlike pointerleave, which is neither). That is why one parent listener can observe leave events from many nested children.