UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 4.57 kB
{"version":3,"file":"backtop2.mjs","sources":["../../../../../../packages/components/backtop/src/backtop.vue"],"sourcesContent":["<template>\n <transition :name=\"`${ns.namespace.value}-fade-in`\">\n <div\n v-if=\"visible\"\n :style=\"backTopStyle\"\n :class=\"ns.b()\"\n @click.stop=\"handleClick\"\n >\n <slot>\n <el-icon :class=\"ns.e('icon')\"><caret-top /></el-icon>\n </slot>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, shallowRef } from 'vue'\nimport { useEventListener, useThrottleFn } from '@vueuse/core'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { easeInOutCubic, throwError } from '@element-plus/utils'\nimport { CaretTop } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { backtopEmits, backtopProps } from './backtop'\n\nconst COMPONENT_NAME = 'ElBacktop'\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = defineProps(backtopProps)\nconst emit = defineEmits(backtopEmits)\n\nconst ns = useNamespace('backtop')\nconst el = shallowRef<HTMLElement>()\nconst container = shallowRef<Document | HTMLElement>()\nconst visible = ref(false)\n\nconst backTopStyle = computed(() => ({\n right: `${props.right}px`,\n bottom: `${props.bottom}px`,\n}))\n\nconst scrollToTop = () => {\n // TODO: use https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo, with behavior: 'smooth'\n\n if (!el.value) return\n const beginTime = Date.now()\n const beginValue = el.value.scrollTop\n const frameFunc = () => {\n if (!el.value) return\n const progress = (Date.now() - beginTime) / 500\n if (progress < 1) {\n el.value.scrollTop = beginValue * (1 - easeInOutCubic(progress))\n requestAnimationFrame(frameFunc)\n } else {\n el.value.scrollTop = 0\n }\n }\n requestAnimationFrame(frameFunc)\n}\nconst handleScroll = () => {\n if (el.value) visible.value = el.value.scrollTop >= props.visibilityHeight\n}\nconst handleClick = (event: MouseEvent) => {\n scrollToTop()\n emit('click', event)\n}\n\nconst handleScrollThrottled = useThrottleFn(handleScroll, 300, true)\n\nuseEventListener(container, 'scroll', handleScrollThrottled)\nonMounted(() => {\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(COMPONENT_NAME, `target is not existed: ${props.target}`)\n }\n container.value = el.value\n }\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;mCAyBc,CAAA;AAAA,EACZ,IAAM,EAAA,cAAA;AACR;;;;;;;AAKA,IAAM,MAAA,EAAA,GAAK,aAAa,SAAS,CAAA,CAAA;AACjC,IAAA,MAAM,KAAK,UAAwB,EAAA,CAAA;AACnC,IAAA,MAAM,YAAY,UAAmC,EAAA,CAAA;AACrD,IAAM,MAAA,OAAA,GAAU,IAAI,KAAK,CAAA,CAAA;AAEzB,IAAM,MAAA,YAAA,GAAe,SAAS,OAAO;AAAA,MACnC,KAAA,EAAO,GAAG,KAAM,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,MAChB,MAAA,EAAQ,GAAG,KAAM,CAAA,MAAA,CAAA,EAAA,CAAA;AAAA,KACjB,CAAA,CAAA,CAAA;AAEF,IAAA,MAAM,cAAc,MAAM;AAGxB,MAAA,IAAI,CAAC,EAAG,CAAA,KAAA;AAAO,QAAA,OAAA;AACf,MAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA,CAAA;AAC3B,MAAM,MAAA,UAAA,GAAa,GAAG,KAAM,CAAA,SAAA,CAAA;AAC5B,MAAA,MAAM,YAAY,MAAM;AACtB,QAAA,IAAI,CAAC,EAAG,CAAA,KAAA;AAAO,UAAA,OAAA;AACf,QAAA,MAAM,QAAY,GAAA,CAAA,IAAA,CAAK,GAAI,EAAA,GAAI,SAAa,IAAA,GAAA,CAAA;AAC5C,QAAA,IAAI,WAAW,CAAG,EAAA;AAChB,UAAA,EAAA,CAAG,KAAM,CAAA,SAAA,GAAY,UAAc,IAAA,CAAA,GAAI,eAAe,QAAQ,CAAA,CAAA,CAAA;AAC9D,UAAA,qBAAA,CAAsB,SAAS,CAAA,CAAA;AAAA,SAC1B,MAAA;AACL,UAAA,EAAA,CAAG,MAAM,SAAY,GAAA,CAAA,CAAA;AAAA,SACvB;AAAA,OACF,CAAA;AACA,MAAA,qBAAA,CAAsB,SAAS,CAAA,CAAA;AAAA,KACjC,CAAA;AACA,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,EAAG,CAAA,KAAA;AAAO,QAAA,OAAA,CAAQ,KAAQ,GAAA,EAAA,CAAG,KAAM,CAAA,SAAA,IAAa,KAAM,CAAA,gBAAA,CAAA;AAAA,KAC5D,CAAA;AACA,IAAM,MAAA,WAAA,GAAc,CAAC,KAAsB,KAAA;AACzC,MAAY,WAAA,EAAA,CAAA;AACZ,MAAA,IAAA,CAAK,SAAS,KAAK,CAAA,CAAA;AAAA,KACrB,CAAA;AAEA,IAAA,MAAM,qBAAwB,GAAA,aAAA,CAAc,YAAc,EAAA,GAAA,EAAK,IAAI,CAAA,CAAA;AAEnE,IAAiB,gBAAA,CAAA,SAAA,EAAW,UAAU,qBAAqB,CAAA,CAAA;AAC3D,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAA,EAAA,CAAA;AACA,MAAA,eAAoB,GAAA,QAAA,CAAA;AAEpB,MAAA,EAAA,CAAA,QAAkB,QAAA,CAAA,eAAA,CAAA;AAChB,MAAA,IAAA,KAAW,CAAA,MAAA,EAAA;AACX,QAAI,EAAA,CAAA,KAAI,GAAO,CAAA,EAAA,GAAA,QAAA,CAAA,aAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAA,KAAA,CAAA,CAAA;AACb,QAAW,IAAA,CAAA,EAAA,CAAA,KAAA,EAAA;AAAwD,UACrE,UAAA,CAAA,cAAA,EAAA,CAAA,uBAAA,EAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AACA,SAAA;AAAqB,QACvB,SAAA,CAAA,KAAA,GAAA,EAAA,CAAA,KAAA,CAAA;AAAA,OACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}