UNPKG

tdesign-vue-next

Version:
1 lines 9.6 kB
{"version":3,"file":"back-top.mjs","sources":["../../../components/back-top/back-top.tsx"],"sourcesContent":["import { computed, defineComponent, onBeforeUnmount, onMounted, ref } from 'vue';\nimport { BacktopIcon as TdBackTopIcon } from 'tdesign-icons-vue-next';\n\nimport { scrollTo } from '@tdesign/shared-utils';\nimport { useConfig, useContent, useChildSlots, useGlobalIcon, usePrefixClass } from '@tdesign/shared-hooks';\n\nimport props from './props';\n\nimport type { TdBackTopProps } from './type';\n\nexport default defineComponent({\n name: 'TBackTop',\n props,\n setup(props: TdBackTopProps) {\n const visible = ref(false);\n const containerRef = ref(null);\n const componentName = usePrefixClass('back-top');\n const { classPrefix } = useConfig('alert');\n\n const { BacktopIcon } = useGlobalIcon({\n BacktopIcon: TdBackTopIcon,\n });\n const renderContent = useContent();\n const getContainer = (container: TdBackTopProps['container']) => {\n if (typeof container === 'string' && typeof document !== undefined) {\n if (container === 'body') {\n return document;\n }\n return document.querySelector(container);\n }\n if (typeof container === 'function') {\n return container();\n }\n return null;\n };\n onMounted(() => {\n containerRef.value = getContainer(props.container) as HTMLElement;\n let visibleHeight: number;\n if (typeof props.visibleHeight === 'string') {\n visibleHeight = Number(props.visibleHeight.replace('px', ''));\n } else {\n visibleHeight = props.visibleHeight;\n }\n if (visibleHeight === 0) {\n visible.value = true;\n return;\n }\n let scrollDOM: HTMLElement;\n if (containerRef.value.scrollTop === undefined) {\n scrollDOM = document.documentElement;\n } else {\n scrollDOM = containerRef.value;\n }\n containerRef.value.onscroll = () => {\n const scrollTop = scrollDOM?.scrollTop;\n if (scrollTop >= visibleHeight) {\n visible.value = true;\n }\n if (scrollTop < visibleHeight && visible.value) {\n visible.value = false;\n }\n };\n });\n\n onBeforeUnmount(() => {\n containerRef.value.onscroll = null;\n });\n\n return () => {\n const { theme, shape, size, target, duration, offset, container } = props;\n const getChild = useChildSlots();\n let children = getChild();\n if (children.length < 1) children = null;\n const cls = computed(() => {\n return {\n [componentName.value]: true,\n [`${componentName.value}--theme-${theme}`]: true,\n [`${componentName.value}--${shape}`]: true,\n [`${componentName.value}--show`]: visible.value,\n [`${classPrefix.value}-size-s`]: size === 'small',\n [`${classPrefix.value}-size-m`]: size === 'medium',\n };\n });\n const defaultContent = (\n <>\n <BacktopIcon class={`${componentName.value}__icon`} size={'24'} />\n <span class={`${componentName.value}__text`}>TOP</span>\n </>\n );\n const getBackTo = () => {\n if (target === container) return 0;\n if (target === 'body') return 0;\n if (!target) return 0;\n const targetNode = getContainer(target);\n if (!targetNode) return 0;\n const y = (targetNode as HTMLElement).getBoundingClientRect().y;\n return y;\n };\n const handleClick = (e: MouseEvent) => {\n const y = getBackTo();\n scrollTo(y, { container: containerRef.value, duration });\n props.onClick?.({ e });\n };\n const positionStyle = computed(() => {\n return {\n insetInlineEnd: offset[0],\n insetBlockEnd: offset[1],\n };\n });\n return (\n <button type=\"button\" class={cls.value} style={positionStyle.value} onClick={handleClick}>\n {renderContent('content', 'default', defaultContent)}\n </button>\n );\n };\n },\n});\n"],"names":["defineComponent","name","props","setup","visible","ref","containerRef","componentName","usePrefixClass","_useConfig","useConfig","classPrefix","_useGlobalIcon","useGlobalIcon","BacktopIcon","TdBackTopIcon","renderContent","useContent","getContainer","container","document","querySelector","onMounted","value","visibleHeight","Number","replace","scrollDOM","scrollTop","documentElement","onscroll","_scrollDOM","onBeforeUnmount","theme","shape","size","target","duration","offset","getChild","useChildSlots","children","length","cls","computed","_defineProperty","concat","defaultContent","_createVNode","_Fragment","_createTextVNode","getBackTo","targetNode","y","getBoundingClientRect","handleClick","e","_props2$onClick","scrollTo","onClick","positionStyle","insetInlineEnd","insetBlockEnd"],"mappings":"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"}