← Chrome 148 reference

v148 · pointer events · drag api · shipped · interop

Pointer event suppression on drag start

Chrome 148 now fires pointercancel, pointerout, and pointerleave events to the drag source element when a drag begins, matching the HTML specification and aligning with Firefox and Safari. Ships in Chrome 148 on all platforms.

at a glance

Shipped inChrome 148 (desktop, Android, WebView)
StatusEnabled by default
Finch flagSuppressPointerStreamAfterDrag
SpecHTML — Drag and drop processing model
ChromeStatus6732314958757888 — Pointer event suppression on drag start

what changed

When the user initiates a drag on an element, the browser begins managing pointer input at the OS level to handle the drag gesture. The HTML specification says the browser must indicate to the drag source that the pointer event stream has ended — i.e., fire the events that tell the element "you are no longer receiving pointer events."

Before Chrome 148, this was only partially done: touch drags on Android fired these events, but mouse-based drags on desktop did not. Chrome 148 completes the implementation: whenever a drag starts, the drag source now receives:

Source: blink-dev Intent to Ship, msg15939, Chrome 148.

why it matters

Code that listens for pointercancel to clean up state (e.g., remove a CSS class applied on pointerdown, cancel an in-progress gesture, or release a pointer capture) now works correctly on desktop during drag operations. Previously, desktop drag sources would not receive pointercancel, so cleanup code that relied on it was never triggered for mouse drags.

element.addEventListener('pointerdown', (e) => {
  element.classList.add('dragging');
  element.setPointerCapture(e.pointerId);
});

// Before Chrome 148: this never fired on desktop mouse drag start
// Chrome 148+: fires correctly when a drag begins
element.addEventListener('pointercancel', () => {
  element.classList.remove('dragging');
});

event order on drag start

When the browser decides a drag has begun, the event sequence at the drag source is:

OrderEventNotes
1dragstartFired on the drag source; drag is now active
2pointercancelNew in Chrome 148 for desktop; was already fired for touch on Android
3pointeroutNew in Chrome 148 for desktop
4pointerleaveNew in Chrome 148 for desktop; bubbles up ancestors

After these events fire, no further pointer events are dispatched to the drag source for that pointer until a new pointerdown occurs.

browser support

Chrome / Edge148 (desktop, Android, WebView)
FirefoxShipped
SafariShipped
Source: chromestatus.com browser positions, May 2026.

see also