UNPKG

tav-ui

Version:
1 lines 3.39 kB
{"version":3,"file":"useScrollTo2.mjs","sources":["../../../../../../packages/hooks/event/useScrollTo.ts"],"sourcesContent":["import { ref, unref } from 'vue'\nimport { isFunction, isUnDef } from '@tav-ui/utils/is'\nexport type DirectionType = 'scrollTop' | 'scrollLeft'\n\nexport interface ScrollToParams {\n el: any\n to: number\n duration?: number\n direction?: DirectionType\n callback?: () => any\n}\n\nconst easeInOutQuad = (t: number, b: number, c: number, d: number) => {\n t /= d / 2\n if (t < 1) return (c / 2) * t * t + b\n\n t--\n return (-c / 2) * (t * (t - 2) - 1) + b\n}\nconst move = (el: HTMLElement, amount: number, direction: DirectionType) => {\n el[direction] = amount\n}\n\nconst position = (el: HTMLElement, direction: DirectionType) => {\n return el[direction]\n}\nexport function useScrollTo({\n el,\n to,\n duration = 500,\n direction = 'scrollTop',\n callback,\n}: ScrollToParams) {\n const isActiveRef = ref(false)\n const start = position(el, direction)\n const change = to - start\n const increment = 20\n let currentTime = 0\n duration = isUnDef(duration) ? 500 : duration\n\n const animateScroll = function () {\n if (!unref(isActiveRef)) return\n\n currentTime += increment\n const val = easeInOutQuad(currentTime, start, change, duration)\n move(el, val, direction)\n if (currentTime < duration && unref(isActiveRef)) requestAnimationFrame(animateScroll)\n else if (callback && isFunction(callback)) callback()\n }\n const run = () => {\n isActiveRef.value = true\n animateScroll()\n }\n\n const stop = () => {\n isActiveRef.value = false\n }\n\n return { start: run, stop }\n}\n"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK;AACtC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,EAAE,IAAI,CAAC,GAAG,CAAC;AACX,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,EAAE,CAAC,EAAE,CAAC;AACN,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC,CAAC;AACF,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,KAAK;AACxC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;AACzB,CAAC,CAAC;AACF,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,SAAS,KAAK;AACpC,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC,CAAC;AACK,SAAS,WAAW,CAAC;AAC5B,EAAE,EAAE;AACJ,EAAE,EAAE;AACJ,EAAE,QAAQ,GAAG,GAAG;AAChB,EAAE,SAAS,GAAG,WAAW;AACzB,EAAE,QAAQ;AACV,CAAC,EAAE;AACH,EAAE,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AACxC,EAAE,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC;AAC5B,EAAE,MAAM,SAAS,GAAG,EAAE,CAAC;AACvB,EAAE,IAAI,WAAW,GAAG,CAAC,CAAC;AACtB,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC;AAChD,EAAE,MAAM,aAAa,GAAG,WAAW;AACnC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3B,MAAM,OAAO;AACb,IAAI,WAAW,IAAI,SAAS,CAAC;AAC7B,IAAI,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAC7B,IAAI,IAAI,WAAW,GAAG,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC;AACpD,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC3C,SAAS,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;AAC7C,MAAM,QAAQ,EAAE,CAAC;AACjB,GAAG,CAAC;AACJ,EAAE,MAAM,GAAG,GAAG,MAAM;AACpB,IAAI,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;AAC7B,IAAI,aAAa,EAAE,CAAC;AACpB,GAAG,CAAC;AACJ,EAAE,MAAM,IAAI,GAAG,MAAM;AACrB,IAAI,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;AAC9B,GAAG,CAAC;AACJ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC9B;;;;"}