mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-22 19:40:40 +03:00
improve pointer capture release code
This commit is contained in:
@@ -67,6 +67,8 @@ const createRootClickStopPropagationEvents = (scrollbar: HTMLElement, documentEl
|
|||||||
on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),
|
on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),
|
||||||
{ _capture: true }
|
{ _capture: true }
|
||||||
);
|
);
|
||||||
|
const releasePointerCaptureEvents = 'pointerup pointerleave pointercancel lostpointercapture';
|
||||||
|
|
||||||
const createInteractiveScrollEvents = (
|
const createInteractiveScrollEvents = (
|
||||||
options: ReadonlyOptions,
|
options: ReadonlyOptions,
|
||||||
doc: Document,
|
doc: Document,
|
||||||
@@ -119,11 +121,18 @@ const createInteractiveScrollEvents = (
|
|||||||
const handleCenter = getHandleOffset(handleRect, trackRect) + handleLength / 2;
|
const handleCenter = getHandleOffset(handleRect, trackRect) + handleLength / 2;
|
||||||
const relativeTrackPointerOffset = pointerDownOffset - trackRect[leftTopKey];
|
const relativeTrackPointerOffset = pointerDownOffset - trackRect[leftTopKey];
|
||||||
const startOffset = isDragScroll ? 0 : relativeTrackPointerOffset - handleCenter;
|
const startOffset = isDragScroll ? 0 : relativeTrackPointerOffset - handleCenter;
|
||||||
|
const releasePointerCapture = (pointerUpEvent: PointerEvent) => {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
||||||
|
runEachAndClear(offFns);
|
||||||
|
pointerCaptureElement.releasePointerCapture(pointerUpEvent.pointerId);
|
||||||
|
};
|
||||||
|
|
||||||
const offFns = [
|
const offFns = [
|
||||||
|
on(doc, releasePointerCaptureEvents, releasePointerCapture),
|
||||||
on(doc, 'selectstart', (event: Event) => preventDefault(event), {
|
on(doc, 'selectstart', (event: Event) => preventDefault(event), {
|
||||||
_passive: false,
|
_passive: false,
|
||||||
}),
|
}),
|
||||||
|
on(_track, releasePointerCaptureEvents, releasePointerCapture),
|
||||||
on(_track, 'pointermove', (pointerMoveEvent: PointerEvent) => {
|
on(_track, 'pointermove', (pointerMoveEvent: PointerEvent) => {
|
||||||
const relativeMovement = pointerMoveEvent[clientXYKey] - pointerDownOffset;
|
const relativeMovement = pointerMoveEvent[clientXYKey] - pointerDownOffset;
|
||||||
|
|
||||||
@@ -154,15 +163,6 @@ const createInteractiveScrollEvents = (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
on(
|
|
||||||
_track,
|
|
||||||
'pointerup',
|
|
||||||
(pointerUpEvent: PointerEvent) => {
|
|
||||||
runEachAndClear(offFns);
|
|
||||||
pointerCaptureElement.releasePointerCapture(pointerUpEvent.pointerId);
|
|
||||||
},
|
|
||||||
{ _once: true }
|
|
||||||
);
|
|
||||||
pointerCaptureElement.setPointerCapture(pointerDownEvent.pointerId);
|
pointerCaptureElement.setPointerCapture(pointerDownEvent.pointerId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user