|
|
|
@ -82,17 +82,20 @@ export function SidebarPart() {
@@ -82,17 +82,20 @@ export function SidebarPart() {
|
|
|
|
|
const el = document.getElementById(link.id); |
|
|
|
|
if (!el) return { distance: Infinity, link: link.id }; |
|
|
|
|
const rect = el.getBoundingClientRect(); |
|
|
|
|
|
|
|
|
|
const distanceTop = Math.abs(centerTarget - rect.top); |
|
|
|
|
const distanceBottom = Math.abs(centerTarget - rect.bottom); |
|
|
|
|
|
|
|
|
|
const distance = Math.min(distanceBottom, distanceTop); |
|
|
|
|
return { distance, link: link.id }; |
|
|
|
|
}) |
|
|
|
|
.sort((a, b) => a.distance - b.distance); |
|
|
|
|
|
|
|
|
|
// shortest distance to the part of the screen we want is the active link
|
|
|
|
|
setActiveLink(viewList[0]?.link ?? ""); |
|
|
|
|
// Check if user has scrolled past the bottom of the page
|
|
|
|
|
if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { |
|
|
|
|
setActiveLink(settingLinks[settingLinks.length - 1].id); |
|
|
|
|
} else { |
|
|
|
|
// shortest distance to the part of the screen we want is the active link
|
|
|
|
|
setActiveLink(viewList[0]?.link ?? ""); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
document.addEventListener("scroll", recheck); |
|
|
|
|
recheck(); |
|
|
|
|