tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 19.9 kB
Source Map (JSON)
{"version":3,"file":"anchor.mjs","sources":["../../../components/anchor/anchor.tsx"],"sourcesContent":["import {\n defineComponent,\n nextTick,\n ComponentPublicInstance,\n ref,\n reactive,\n onMounted,\n onUnmounted,\n watchEffect,\n provide,\n} from 'vue';\nimport { ANCHOR_SHARP_REGEXP, ANCHOR_CONTAINER, getOffsetTop } from './utils';\nimport {\n isServer,\n on,\n off,\n getScroll,\n scrollTo,\n getScrollContainer as utilsGetScrollContainer,\n} from '@tdesign/shared-utils';\nimport props from './props';\nimport { useTNodeJSX, usePrefixClass, useCommonClassName } from '@tdesign/shared-hooks';\nimport { SlotReturnValue } from '../common';\nimport Affix from '../affix';\nimport { TdAnchorProps } from './type';\n\nimport { AnchorInjectionKey } from './constants';\n\nexport interface Anchor extends ComponentPublicInstance {\n scrollContainer: ANCHOR_CONTAINER;\n // 执行scrollTo设置的flag, 用来禁止执行handleScroll\n handleScrollLock: boolean;\n}\n\nexport default defineComponent({\n name: 'TAnchor',\n inheritAttrs: false,\n props,\n setup(props: TdAnchorProps, { attrs }) {\n const anchorRef = ref<HTMLElement | null>(null);\n const links = ref<string[]>([]);\n const active = ref('');\n const scrollContainer = ref<ANCHOR_CONTAINER>();\n const handleScrollLock = ref<boolean>(false);\n const activeLineStyle = reactive({});\n const COMPONENT_NAME = usePrefixClass('anchor');\n const ANCHOR_LINE_CLASSNAME = usePrefixClass('anchor__line');\n const ANCHOR_LINE_CURSOR_CLASSNAME = usePrefixClass('anchor__line-cursor');\n const { STATUS, SIZE } = useCommonClassName();\n const renderTNodeJSX = useTNodeJSX();\n /**\n * 获取滚动容器\n * 1. 如果是string则通过id获取\n * 2. 如果是method则获取方法返回值\n */\n const getScrollContainer = () => {\n if (isServer) {\n return;\n }\n const { container } = props;\n scrollContainer.value = utilsGetScrollContainer(container) as HTMLElement;\n on(scrollContainer.value, 'scroll', handleScroll);\n handleScroll();\n };\n /**\n * 监听滚动事件\n */\n const handleScroll = () => {\n if (handleScrollLock.value) return;\n const { bounds, targetOffset } = props;\n const filters: { top: number; link: string }[] = [];\n let nextActive = '';\n\n const isScrollBottom =\n scrollContainer.value instanceof HTMLElement &&\n Math.abs(\n scrollContainer.value.scrollTop + scrollContainer.value.clientHeight - scrollContainer.value.scrollHeight,\n ) < 2;\n\n // 找出所有当前top小于预设值\n links.value.forEach((link) => {\n const anchor = getAnchorTarget(link);\n if (!anchor) {\n return;\n }\n const top = getOffsetTop(anchor, scrollContainer.value);\n if (top < bounds + targetOffset) {\n filters.push({\n link,\n top,\n });\n }\n });\n // 找出小于预设值集合中top最大的\n if (filters.length) {\n const latest = filters.reduce((prev, cur) => (prev.top > cur.top ? prev : cur));\n nextActive = latest.link;\n }\n\n // 如果滚动到底部,且当前计算出的 active 在视口中,且用户没有手动切换到更后的锚点\n // 需要判断当前 active 是否由于触底而无法到达顶部触发线\n if (isScrollBottom && links.value.length) {\n const currentActiveIndex = links.value.indexOf(active.value);\n const calcActiveIndex = links.value.indexOf(nextActive);\n\n // 如果当前已经激活的项索引比计算出来的更大,说明它是在底部可见的,不应被跳回到前面的项\n if (currentActiveIndex > calcActiveIndex) {\n const anchor = getAnchorTarget(active.value);\n if (anchor) {\n const top = getOffsetTop(anchor, scrollContainer.value);\n // 只要还在视口内(元素与视口有重叠),就维持它的激活状态\n if (scrollContainer.value instanceof HTMLElement) {\n const clientHeight = scrollContainer.value.clientHeight;\n const bottom = top + anchor.offsetHeight;\n if (bottom > 0 && top < clientHeight) {\n nextActive = active.value;\n }\n }\n }\n }\n }\n\n setCurrentActiveLink(nextActive);\n };\n /**\n * 获取锚点对应的target元素\n *\n * @param {string} link\n */\n const getAnchorTarget = (link: string): HTMLElement => {\n const matcher = link.match(ANCHOR_SHARP_REGEXP);\n if (!matcher) {\n return;\n }\n const anchor = document.getElementById(matcher[1]);\n if (!anchor) {\n return;\n }\n return anchor;\n };\n /**\n * 注册锚点\n *\n * @param {string} link\n */\n const registerLink = (link: string) => {\n if (!ANCHOR_SHARP_REGEXP.test(link) || links.value.indexOf(link) !== -1) {\n return;\n }\n links.value.push(link);\n };\n /**\n * 注销锚点\n *\n * @param {string} link\n */\n const unregisterLink = (link: string) => {\n links.value = links.value.filter((each) => each !== link);\n };\n /**\n * 设置当前激活状态锚点\n *\n * @param {string} link\n */\n const setCurrentActiveLink = async (link: string): Promise<void> => {\n if (active.value === link) {\n return;\n }\n active.value = link;\n props.onChange?.(link, active.value);\n await nextTick();\n updateActiveLine();\n };\n /**\n * 计算active-line所在的位置\n * 当前active-item的top + height, 以及ANCHOR_ITEM_PADDING修正\n */\n const updateActiveLine = () => {\n const ele = anchorRef.value?.querySelector(`.${STATUS.value.active}>a`) as HTMLAnchorElement;\n if (!ele) {\n Object.assign(activeLineStyle, {});\n return;\n }\n const { offsetTop: top, offsetHeight: height } = ele;\n Object.assign(activeLineStyle, {\n top: `${top}px`,\n height: `${height}px`,\n opacity: 1,\n });\n };\n /**\n * 监听AnchorLink点击事件\n * @param {{ href: string; title: string }} link\n */\n const handleLinkClick = (link: { href: string; title: string; e: MouseEvent }) => {\n props.onClick?.(link);\n };\n /**\n * 滚动到指定锚点\n *\n * @param {string} link\n */\n const handleScrollTo = async (link: string): Promise<void> => {\n const anchor = getAnchorTarget(link);\n setCurrentActiveLink(link);\n if (!anchor) return;\n handleScrollLock.value = true;\n const { targetOffset } = props;\n const scrollTop = getScroll(scrollContainer.value);\n const offsetTop = getOffsetTop(anchor, scrollContainer.value);\n const top = scrollTop + offsetTop - targetOffset;\n await scrollTo(top, {\n container: scrollContainer.value,\n });\n handleScrollLock.value = false;\n };\n const renderCursor = () => {\n const titleContent: SlotReturnValue = renderTNodeJSX('cursor');\n return titleContent || <div class={ANCHOR_LINE_CURSOR_CLASSNAME.value}></div>;\n };\n onMounted(async () => {\n getScrollContainer();\n if (active.value) {\n await nextTick();\n handleScrollTo(active.value);\n }\n });\n onUnmounted(() => {\n if (!scrollContainer.value) return;\n off(scrollContainer.value, 'scroll', handleScroll);\n });\n watchEffect(() => {\n // 清空上一个container的事件监听\n if (scrollContainer.value) {\n off(scrollContainer.value, 'scroll', handleScroll);\n }\n getScrollContainer();\n });\n provide(\n AnchorInjectionKey,\n reactive({\n registerLink,\n unregisterLink,\n handleScrollTo,\n handleLinkClick,\n active,\n }),\n );\n return () => {\n const { size, affixProps } = props;\n const className = [COMPONENT_NAME.value, SIZE.value[size]];\n\n const content = (\n <div ref={anchorRef} class={className} {...attrs}>\n <div class={ANCHOR_LINE_CLASSNAME.value}>\n <div class={`${ANCHOR_LINE_CURSOR_CLASSNAME.value}-wrapper`} style={activeLineStyle}>\n {renderCursor()}\n </div>\n </div>\n {renderTNodeJSX('default')}\n </div>\n );\n\n if (affixProps) {\n return <Affix {...affixProps}>{content}</Affix>;\n }\n\n return content;\n };\n },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","inheritAttrs","props","setup","attrs","_ref","anchorRef","ref","links","active","scrollContainer","handleScrollLock","activeLineStyle","reactive","COMPONENT_NAME","usePrefixClass","ANCHOR_LINE_CLASSNAME","ANCHOR_LINE_CURSOR_CLASSNAME","_useCommonClassName","useCommonClassName","STATUS","SIZE","renderTNodeJSX","useTNodeJSX","getScrollContainer","isServer","container","value","utilsGetScrollContainer","on","handleScroll","bounds","targetOffset","filters","nextActive","isScrollBottom","HTMLElement","Math","abs","scrollTop","clientHeight","scrollHeight","forEach","link","anchor","getAnchorTarget","top","getOffsetTop","push","length","latest","reduce","prev","cur","currentActiveIndex","indexOf","calcActiveIndex","bottom","offsetHeight","setCurrentActiveLink","matcher","match","ANCHOR_SHARP_REGEXP","document","getElementById","registerLink","test","unregisterLink","filter","each","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_props2$onChange","wrap","_context","next","abrupt","onChange","nextTick","updateActiveLine","stop","_x","apply","arguments","_anchorRef$value","ele","querySelector","assign","offsetTop","height","opacity","handleLinkClick","_props2$onClick","onClick","handleScrollTo","_ref3","_callee2","_context2","getScroll","scrollTo","_x2","renderCursor","titleContent","_createVNode","onMounted","_callee3","_context3","onUnmounted","off","watchEffect","provide","AnchorInjectionKey","size","affixProps","className","content","concat","Affix","_default"],"mappings":"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"}