improve scrollbar interaction

This commit is contained in:
Rene
2022-07-16 06:58:03 +02:00
parent c807435e65
commit 2704b66f69
@@ -9,6 +9,7 @@ import {
removeClass, removeClass,
removeElements, removeElements,
runEachAndClear, runEachAndClear,
stopPropagation,
} from 'support'; } from 'support';
import { import {
classNameScrollbar, classNameScrollbar,
@@ -59,6 +60,13 @@ export type ScrollbarsSetupElements = [
const interactionStartEventNames = 'touchstart mouseenter'; const interactionStartEventNames = 'touchstart mouseenter';
const interactionEndEventNames = 'touchend touchcancel mouseleave'; const interactionEndEventNames = 'touchend touchcancel mouseleave';
const stopRootClickPropagation = (scrollbar: HTMLElement, documentElm: Document) =>
on(
scrollbar,
'mousedown',
on.bind(0, documentElm, 'click', stopPropagation, { _once: true, _capture: true }),
{ _capture: true }
);
export const createScrollbarsSetupElements = ( export const createScrollbarsSetupElements = (
target: InitializationTarget, target: InitializationTarget,
@@ -67,7 +75,7 @@ export const createScrollbarsSetupElements = (
const { _getInitializationStrategy } = getEnvironment(); const { _getInitializationStrategy } = getEnvironment();
const { _scrollbarsSlot: environmentScrollbarSlot } = const { _scrollbarsSlot: environmentScrollbarSlot } =
_getInitializationStrategy() as ScrollbarsInitializationStrategy; _getInitializationStrategy() as ScrollbarsInitializationStrategy;
const { _target, _host, _viewport, _targetIsElm } = structureSetupElements; const { _documentElm, _target, _host, _viewport, _targetIsElm } = structureSetupElements;
const initializationScrollbarSlot = const initializationScrollbarSlot =
!_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot; !_targetIsElm && (target as ScrollbarsInitialization).scrollbarsSlot;
const evaluatedScrollbarSlot = const evaluatedScrollbarSlot =
@@ -113,24 +121,19 @@ export const createScrollbarsSetupElements = (
appendChildren(scrollbar, track); appendChildren(scrollbar, track);
appendChildren(track, handle); appendChildren(track, handle);
push(destroyFns, removeElements.bind(0, scrollbar));
push(arrToPush, result); push(arrToPush, result);
push(destroyFns, [
push( removeElements.bind(0, scrollbar),
destroyFns,
on(scrollbar, interactionStartEventNames, () => { on(scrollbar, interactionStartEventNames, () => {
addRemoveClassHorizontal(classNamesScrollbarInteraction, true); addRemoveClassHorizontal(classNamesScrollbarInteraction, true);
addRemoveClassVertical(classNamesScrollbarInteraction, true); addRemoveClassVertical(classNamesScrollbarInteraction, true);
}) }),
);
push(
destroyFns,
on(scrollbar, interactionEndEventNames, () => { on(scrollbar, interactionEndEventNames, () => {
addRemoveClassHorizontal(classNamesScrollbarInteraction); addRemoveClassHorizontal(classNamesScrollbarInteraction);
addRemoveClassVertical(classNamesScrollbarInteraction); addRemoveClassVertical(classNamesScrollbarInteraction);
}) }),
); stopRootClickPropagation(scrollbar, _documentElm),
]);
return result; return result;
}; };