Guo 3 weeks ago committed by GitHub
commit 6bd02ab425
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -8,6 +8,8 @@ const ignoreRE = /\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/
// cached list of anchor elements from resolveHeaders
const resolvedHeaders: { element: HTMLHeadElement; link: string }[] = []
let asideOutlineLinkDomList: NodeListOf<HTMLLIElement> | null = null
let asideContainerDom: HTMLDivElement | null = null
export function resolveTitle(theme: DefaultTheme.Config): string {
return (
@ -99,6 +101,27 @@ export function useActiveAnchor(
window.removeEventListener('scroll', onScroll)
})
function scrollToActiveLink(i: number) {
if (!asideContainerDom) {
asideContainerDom = document.querySelector('.aside-container')!
}
const containerClientHeight = container.value.clientHeight
const asideContainerClientHeight = asideContainerDom.clientHeight
if (containerClientHeight > asideContainerClientHeight) {
if (!asideOutlineLinkDomList) {
asideOutlineLinkDomList = document.querySelectorAll(
'.VPDocOutlineItem.root .outline-link'
)
}
const height = asideOutlineLinkDomList[i]?.clientHeight
if (height) {
asideContainerDom.scrollTo({
top: i * height
})
}
}
}
function setActiveLink() {
if (!isAsideEnabled.value) {
return
@ -137,14 +160,18 @@ export function useActiveAnchor(
}
// find the last header above the top of viewport
let activeLink: string | null = null
for (const { link, top } of headers) {
let activeIndex: number | null = null
for (let i = 0; i < headers.length; i++) {
const { top } = headers[i]
if (top > scrollY + getScrollOffset() + 4) {
break
}
activeLink = link
activeIndex = i
}
if (activeIndex !== null) {
scrollToActiveLink(activeIndex)
activateLink(headers[activeIndex].link)
}
activateLink(activeLink)
}
function activateLink(hash: string | null) {

Loading…
Cancel
Save