element-plus
Version:
A Component Library for Vue 3
1 lines • 4.51 kB
Source Map (JSON)
{"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'\n\ndefineOptions({\n name: 'ElBacktop',\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)\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":";;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAA,MAAA,cAAA,GAAA,WAAA,CAAA;AASA,IAAA,MAAA,EAAA,GAAA,aAAA,SAAA,CAAA,CAAA;AACA,IAAA,MAAA,KAAA,UAAA,EAAA,CAAA;AACA,IAAA,MAAA,YAAA,UAAA,EAAA,CAAA;AACA,IAAA,MAAA,OAAA,GAAA,IAAA,KAAA,CAAA,CAAA;AAEA,IAAA,MAAA,YAAA,GAAA,SAAA,OAAA;AAAA,MACA,KAAA,EAAA,GAAA,KAAA,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,MACA,MAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAA,EAAA,CAAA;AAAA,KACA,CAAA,CAAA,CAAA;AAEA,IAAA,MAAA,cAAA,MAAA;AAGA,MAAA,IAAA,CAAA,EAAA,CAAA,KAAA;AAAA,QAAA,OAAA;AACA,MAAA,MAAA,SAAA,GAAA,KAAA,GAAA,EAAA,CAAA;AACA,MAAA,MAAA,UAAA,GAAA,GAAA,KAAA,CAAA,SAAA,CAAA;AACA,MAAA,MAAA,YAAA,MAAA;AACA,QAAA,IAAA,CAAA,EAAA,CAAA,KAAA;AAAA,UAAA,OAAA;AACA,QAAA,MAAA,QAAA,GAAA,CAAA,IAAA,CAAA,GAAA,EAAA,GAAA,SAAA,IAAA,GAAA,CAAA;AACA,QAAA,IAAA,WAAA,CAAA,EAAA;AACA,UAAA,EAAA,CAAA,KAAA,CAAA,SAAA,GAAA,UAAA,IAAA,CAAA,GAAA,eAAA,QAAA,CAAA,CAAA,CAAA;AACA,UAAA,qBAAA,CAAA,SAAA,CAAA,CAAA;AAAA,SACA,MAAA;AACA,UAAA,EAAA,CAAA,MAAA,SAAA,GAAA,CAAA,CAAA;AAAA,SACA;AAAA,OACA,CAAA;AACA,MAAA,qBAAA,CAAA,SAAA,CAAA,CAAA;AAAA,KACA,CAAA;AACA,IAAA,MAAA,eAAA,MAAA;AACA,MAAA,IAAA,EAAA,CAAA,KAAA;AAAA,QAAA,OAAA,CAAA,KAAA,GAAA,EAAA,CAAA,KAAA,CAAA,SAAA,IAAA,KAAA,CAAA,gBAAA,CAAA;AAAA,KACA,CAAA;AACA,IAAA,MAAA,WAAA,GAAA,CAAA,KAAA,KAAA;AACA,MAAA,WAAA,EAAA,CAAA;AACA,MAAA,IAAA,CAAA,SAAA,KAAA,CAAA,CAAA;AAAA,KACA,CAAA;AAEA,IAAA,MAAA,qBAAA,GAAA,aAAA,CAAA,YAAA,EAAA,GAAA,CAAA,CAAA;AAEA,IAAA,gBAAA,CAAA,SAAA,EAAA,UAAA,qBAAA,CAAA,CAAA;AACA,IAAA,SAAA,CAAA,MAAA;AACA,MAAA,IAAA,EAAA,CAAA;AACA,MAAA,eAAA,GAAA,QAAA,CAAA;AAEA,MAAA,EAAA,CAAA,QAAA,QAAA,CAAA,eAAA,CAAA;AACA,MAAA,IAAA,KAAA,CAAA,MAAA,EAAA;AACA,QAAA,EAAA,CAAA,KAAA,GAAA,CAAA,EAAA,GAAA,QAAA,CAAA,aAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAA,KAAA,CAAA,CAAA;AACA,QAAA,IAAA,CAAA,EAAA,CAAA,KAAA,EAAA;AAAA,UACA,UAAA,CAAA,cAAA,EAAA,CAAA,uBAAA,EAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AACA,SAAA;AAAA,QACA,SAAA,CAAA,KAAA,GAAA,EAAA,CAAA,KAAA,CAAA;AAAA,OACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}