UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 7.58 kB
{"version":3,"file":"back-top.mjs","sources":["../../src/back-top/back-top.tsx"],"sourcesContent":["import { computed, defineComponent, onBeforeUnmount, onMounted, ref } from 'vue';\n\nimport { scrollTo } from '../utils/dom';\nimport { useChildSlots, usePrefixClass, useContent, useConfig } from '../hooks';\nimport props from './props';\n\nimport type { TdBackTopProps } from './type';\n\nexport default defineComponent({\n name: 'XBackTop',\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 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 <icon-ri-skip-up-line class={`${componentName.value}__icon`} style=\"font-size: 2.2em;\" />\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":["name","props","onMounted","visibleHeight","containerRef","onBeforeUnmount","_resolveComponent","_createVNode","_createTextVNode","duration","e","insetInlineEnd"],"mappings":"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"}