From a91acb838f167a6452d12839ab71180dbe99de6d Mon Sep 17 00:00:00 2001 From: Steven Leabo Date: Wed, 24 Dec 2025 06:53:44 -0500 Subject: [PATCH] simplify scroll link behavior in TitleBar --- src/utils/scrollTo.ts | 61 +++++-------------------------------------- 1 file changed, 6 insertions(+), 55 deletions(-) diff --git a/src/utils/scrollTo.ts b/src/utils/scrollTo.ts index 25ce31e..de1cf4a 100644 --- a/src/utils/scrollTo.ts +++ b/src/utils/scrollTo.ts @@ -1,61 +1,12 @@ -// help functions -const easeInOutQuad = (t: number, b: number, c: number, d: number): number => { - t /= d / 2 - if (t < 1) return c / 2 * t * t + b - t-- - return -c / 2 * (t * (t - 2) - 1) + b -} - -const animatedScrollTo = ( - element: HTMLElement, - to: number, - duration: number, - callback?: () => void -): void => { - let start = element.scrollTop - let change = to - start - let animationStart = +new Date() - let animating = true - let lastpos: number | null = null - - const animateScroll = (): void => { - if (!animating) { - return - } - requestAnimationFrame(animateScroll) - const now = +new Date() - const val = Math.floor(easeInOutQuad(now - animationStart, start, change, duration)) - if (lastpos) { - if (lastpos === Math.ceil(element.scrollTop)) { - lastpos = val - element.scrollTop = val - } else { - animating = false - } - } else { - lastpos = val - element.scrollTop = val - } - if (now > animationStart + duration) { - element.scrollTop = to - animating = false - if (callback) { - callback() - } - } - } - requestAnimationFrame(animateScroll) -} - const scrollToElement = (selector: string): void => { - // Scroll to search highlight word - const container = document.documentElement const anchor = document.querySelector(selector) - if (anchor) { - const { y } = anchor.getBoundingClientRect() - const DURATION = 300 - animatedScrollTo(container, container.scrollTop + y - 60, DURATION) + if (!anchor) { + return } + + const headerOffset = 60 + const top = anchor.getBoundingClientRect().top + window.pageYOffset - headerOffset + window.scrollTo({ top, behavior: 'smooth' }) } export default scrollToElement