element-plus
Version:
A Component Library for Vue 3
1 lines • 2.93 kB
Source Map (JSON)
{"version":3,"file":"use-grid-wheel.mjs","sources":["../../../../../../../packages/components/virtual-list/src/hooks/use-grid-wheel.ts"],"sourcesContent":["import { cAF, rAF } from '@element-plus/utils'\n\nimport type { ComputedRef } from 'vue'\n\ninterface GridWheelState {\n atXStartEdge: ComputedRef<boolean>\n atXEndEdge: ComputedRef<boolean>\n atYStartEdge: ComputedRef<boolean>\n atYEndEdge: ComputedRef<boolean>\n}\n\ntype GridWheelHandler = (x: number, y: number) => void\n\nexport const useGridWheel = (\n { atXEndEdge, atXStartEdge, atYEndEdge, atYStartEdge }: GridWheelState,\n onWheelDelta: GridWheelHandler\n) => {\n let frameHandle: number | null = null\n let xOffset = 0\n let yOffset = 0\n\n const hasReachedEdge = (x: number, y: number) => {\n const xEdgeReached =\n (x < 0 && atXStartEdge.value) || (x > 0 && atXEndEdge.value)\n const yEdgeReached =\n (y < 0 && atYStartEdge.value) || (y > 0 && atYEndEdge.value)\n return xEdgeReached || yEdgeReached\n }\n\n const onWheel = (e: WheelEvent) => {\n cAF(frameHandle!)\n\n let x = e.deltaX\n let y = e.deltaY\n // Simulate native behavior when using touch pad/track pad for wheeling.\n if (Math.abs(x) > Math.abs(y)) {\n y = 0\n } else {\n x = 0\n }\n\n // Special case for windows machine with shift key + wheel scrolling\n if (e.shiftKey && y !== 0) {\n x = y\n y = 0\n }\n\n if (hasReachedEdge(x, y)) return\n\n xOffset += x\n yOffset += y\n\n e.preventDefault()\n\n frameHandle = rAF(() => {\n onWheelDelta(xOffset, yOffset)\n xOffset = 0\n yOffset = 0\n })\n }\n\n return {\n hasReachedEdge,\n onWheel,\n }\n}\n"],"names":[],"mappings":";;AAaO,MAAM,YAAA,GAAe,CAC1B,EAAE,UAAA,EAAY,cAAc,UAAA,EAAY,YAAA,IACxC,YAAA,KACG;AACH,EAAA,IAAI,WAAA,GAA6B,IAAA;AACjC,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,EAAW,CAAA,KAAc;AAC/C,IAAA,MAAM,eACH,CAAA,GAAI,CAAA,IAAK,aAAa,KAAA,IAAW,CAAA,GAAI,KAAK,UAAA,CAAW,KAAA;AACxD,IAAA,MAAM,eACH,CAAA,GAAI,CAAA,IAAK,aAAa,KAAA,IAAW,CAAA,GAAI,KAAK,UAAA,CAAW,KAAA;AACxD,IAAA,OAAO,YAAA,IAAgB,YAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAkB;AACjC,IAAA,GAAA,CAAI,WAAY,CAAA;AAEhB,IAAA,IAAI,IAAI,CAAA,CAAE,MAAA;AACV,IAAA,IAAI,IAAI,CAAA,CAAE,MAAA;AAEV,IAAA,IAAI,KAAK,GAAA,CAAI,CAAC,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG;AAC7B,MAAA,CAAA,GAAI,CAAA;AAAA,IACN,CAAA,MAAO;AACL,MAAA,CAAA,GAAI,CAAA;AAAA,IACN;AAGA,IAAA,IAAI,CAAA,CAAE,QAAA,IAAY,CAAA,KAAM,CAAA,EAAG;AACzB,MAAA,CAAA,GAAI,CAAA;AACJ,MAAA,CAAA,GAAI,CAAA;AAAA,IACN;AAEA,IAAA,IAAI,cAAA,CAAe,CAAA,EAAG,CAAC,CAAA,EAAG;AAE1B,IAAA,OAAA,IAAW,CAAA;AACX,IAAA,OAAA,IAAW,CAAA;AAEX,IAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,IAAA,WAAA,GAAc,IAAI,MAAM;AACtB,MAAA,YAAA,CAAa,SAAS,OAAO,CAAA;AAC7B,MAAA,OAAA,GAAU,CAAA;AACV,MAAA,OAAA,GAAU,CAAA;AAAA,IACZ,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}