tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 6.16 kB
Source Map (JSON)
{"version":3,"file":"back-top.mjs","sources":["../../src/back-top/back-top.tsx"],"sourcesContent":["import { computed, defineComponent, onMounted, onUnmounted, ref } from 'vue';\nimport { useElementBounding } from '@vueuse/core';\nimport { BacktopIcon as TIconBackTop } from 'tdesign-icons-vue-next';\n\nimport { isBrowser } from '../shared';\nimport props from './props';\nimport config from '../config';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useClass';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-back-top`,\n props,\n setup(props) {\n const renderTNodeJSX = useTNodeJSX();\n const backTopClass = usePrefixClass('back-top');\n\n const target = computed(() => {\n if (!isBrowser) return undefined;\n return props.target ? props.target() : window.document.documentElement;\n });\n const container = ref<HTMLElement>();\n const { top } = useElementBounding(target);\n const visible = ref(false);\n const backTopClasses = computed(() => {\n return {\n [`${backTopClass.value}`]: true,\n [`${backTopClass.value}--fixed`]: props.fixed,\n [`${backTopClass.value}--${props.theme}`]: true,\n };\n });\n\n const handleClick = () => {\n if (isBrowser) {\n container.value.scrollTop = 0 + top.value;\n props.onToTop?.();\n }\n };\n const getContainer = (container: Function) => {\n if (typeof container === 'function') {\n return container();\n }\n return document.documentElement;\n };\n\n onMounted(() => {\n if (isBrowser) {\n container.value = getContainer(props.container);\n container.value.onscroll = () => {\n if (container.value?.scrollTop >= props.visibilityHeight) {\n visible.value = true;\n }\n if (visible.value && container.value?.scrollTop < props.visibilityHeight) {\n visible.value = false;\n }\n };\n }\n });\n\n onUnmounted(() => {\n container.value.onscroll = null;\n });\n\n const readerIcon = () => {\n if (props.icon === true) {\n return <TIconBackTop size=\"22px\"></TIconBackTop>;\n }\n\n return renderTNodeJSX('icon');\n };\n return () => {\n return (\n <div class={backTopClasses.value} v-show={visible.value} onClick={handleClick}>\n {readerIcon()}\n {props.text && <span class={`${backTopClass.value}__text--${props.theme}`}>{props.text}</span>}\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","props","setup","renderTNodeJSX","useTNodeJSX","backTopClass","usePrefixClass","target","computed","isBrowser","window","document","documentElement","container","ref","_useElementBounding","useElementBounding","top","visible","backTopClasses","_defineProperty","concat","value","fixed","theme","handleClick","_props2$onToTop","scrollTop","onToTop","getContainer","onMounted","onscroll","_container$value","_container$value2","visibilityHeight","onUnmounted","readerIcon","icon","_createVNode","TIconBackTop","_withDirectives","text","_vShow"],"mappings":"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"}