element-plus
Version:
A Component Library for Vue 3
1 lines • 2.19 kB
Source Map (JSON)
{"version":3,"file":"use-wheel.mjs","sources":["../../../../../../../packages/components/virtual-list/src/hooks/use-wheel.ts"],"sourcesContent":["import { rAF, cAF } from '@element-plus/utils/raf'\nimport { isFF } from '../utils'\nimport { HORIZONTAL, VERTICAL } from '../defaults'\n\nimport type { ComputedRef } from 'vue'\nimport type { LayoutDirection } from '../types'\n\nconst LayoutKeys = {\n [HORIZONTAL]: 'deltaX',\n [VERTICAL]: 'deltaY',\n}\n\ninterface ListWheelState {\n atStartEdge: ComputedRef<boolean> // exclusive to reachEnd\n atEndEdge: ComputedRef<boolean>\n layout: ComputedRef<LayoutDirection>\n}\n\ntype ListWheelHandler = (offset: number) => void\n\nconst useWheel = (\n { atEndEdge, atStartEdge, layout }: ListWheelState,\n onWheelDelta: ListWheelHandler\n) => {\n let frameHandle: number\n let offset = 0\n\n // let scrollLock = false\n // let lockHandle = null\n\n // const lockScroll = () => {\n // clearTimeout(lockHandle)\n // scrollLock = true\n // lockHandle = setTimeout(() => scrollLock = false, 50)\n // }\n\n const hasReachedEdge = (offset: number) => {\n const edgeReached =\n (offset < 0 && atStartEdge.value) || (offset > 0 && atEndEdge.value)\n\n return edgeReached\n }\n\n const onWheel = (e: WheelEvent) => {\n cAF(frameHandle)\n\n const newOffset = e[LayoutKeys[layout.value]]\n\n if (hasReachedEdge(offset) && hasReachedEdge(offset + newOffset)) return\n\n offset += newOffset\n\n if (!isFF) {\n e.preventDefault()\n }\n\n frameHandle = rAF(() => {\n onWheelDelta(offset)\n offset = 0\n })\n }\n\n return {\n hasReachedEdge,\n onWheel,\n }\n}\n\nexport default useWheel\n"],"names":[],"mappings":";;;;AAOA,MAAM,aAAa;AAAA,GAChB,aAAa;AAAA,GACb,WAAW;AAAA;MAWR,WAAW,CACf,EAAE,WAAW,aAAa,UAC1B,iBACG;AACH,MAAI;AACJ,MAAI,SAAS;AAWb,QAAM,iBAAiB,CAAC,YAAmB;AACzC,UAAM,cACH,UAAS,KAAK,YAAY,SAAW,UAAS,KAAK,UAAU;AAEhE,WAAO;AAAA;AAGT,QAAM,UAAU,CAAC,MAAkB;AACjC,QAAI;AAEJ,UAAM,YAAY,EAAE,WAAW,OAAO;AAEtC,QAAI,eAAe,WAAW,eAAe,SAAS;AAAY;AAElE,cAAU;AAEV,QAAI,CAAC,MAAM;AACT,QAAE;AAAA;AAGJ,kBAAc,IAAI,MAAM;AACtB,mBAAa;AACb,eAAS;AAAA;AAAA;AAIb,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;;;;"}