tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 6.43 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';\nimport getScrollParent from '../_util/getScrollParent';\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 const root = ref<HTMLElement>();\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 getScrollParent(root.value, 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} ref={root} 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","root","ref","target","computed","isBrowser","window","document","documentElement","container","_useElementBounding","useElementBounding","top","visible","backTopClasses","_defineProperty","concat","value","fixed","theme","handleClick","_props2$onToTop","scrollTop","onToTop","getContainer","getScrollParent","onMounted","onscroll","_container$value","_container$value2","visibilityHeight","onUnmounted","readerIcon","icon","_createVNode","TIconBackTop","_withDirectives","text","_vShow"],"mappings":"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"}