UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 2.13 kB
{"version":3,"file":"use-backtop.mjs","names":[],"sources":["../../../../../../packages/components/backtop/src/use-backtop.ts"],"sourcesContent":["import { onMounted, ref, shallowRef } from 'vue'\nimport { useEventListener, useThrottleFn } from '@vueuse/core'\nimport { throwError } from '@element-plus/utils'\n\nimport type { SetupContext } from 'vue'\nimport type { BacktopEmits, BacktopProps } from './backtop'\n\nexport const useBackTop = (\n props: Required<BacktopProps>,\n emit: SetupContext<BacktopEmits>['emit'],\n componentName: string\n) => {\n const el = shallowRef<HTMLElement>()\n const container = shallowRef<Document | HTMLElement>()\n const visible = ref(false)\n\n const handleScroll = () => {\n if (el.value) visible.value = el.value.scrollTop >= props.visibilityHeight\n }\n\n const handleClick = (event: MouseEvent) => {\n el.value?.scrollTo({ top: 0, behavior: 'smooth' })\n emit('click', event)\n }\n\n const handleScrollThrottled = useThrottleFn(handleScroll, 300, true)\n\n useEventListener(container, 'scroll', handleScrollThrottled)\n onMounted(() => {\n container.value = document\n el.value = document.documentElement\n\n if (props.target) {\n el.value = document.querySelector<HTMLElement>(props.target) ?? undefined\n if (!el.value) {\n throwError(componentName, `target does not exist: ${props.target}`)\n }\n container.value = el.value\n }\n // Give visible an initial value, fix #13066\n handleScroll()\n })\n\n return {\n visible,\n handleClick,\n }\n}\n"],"mappings":";;;;;AAOA,MAAa,cACX,OACA,MACA,kBACG;CACH,MAAM,KAAK,YAAyB;CACpC,MAAM,YAAY,YAAoC;CACtD,MAAM,UAAU,IAAI,MAAM;CAE1B,MAAM,qBAAqB;AACzB,MAAI,GAAG,MAAO,SAAQ,QAAQ,GAAG,MAAM,aAAa,MAAM;;CAG5D,MAAM,eAAe,UAAsB;AACzC,KAAG,OAAO,SAAS;GAAE,KAAK;GAAG,UAAU;GAAU,CAAC;AAClD,OAAK,SAAS,MAAM;;AAKtB,kBAAiB,WAAW,UAFE,cAAc,cAAc,KAAK,KAAK,CAER;AAC5D,iBAAgB;AACd,YAAU,QAAQ;AAClB,KAAG,QAAQ,SAAS;AAEpB,MAAI,MAAM,QAAQ;AAChB,MAAG,QAAQ,SAAS,cAA2B,MAAM,OAAO,IAAI;AAChE,OAAI,CAAC,GAAG,MACN,YAAW,eAAe,0BAA0B,MAAM,SAAS;AAErE,aAAU,QAAQ,GAAG;;AAGvB,gBAAc;GACd;AAEF,QAAO;EACL;EACA;EACD"}