From d255d7d6a2dbf5120bc2c00eb0aa5d92a0648a1e Mon Sep 17 00:00:00 2001 From: Innei Date: Thu, 30 Oct 2025 21:09:54 +0800 Subject: [PATCH] feat(settings): enhance scroll behavior in SettingModalContent - Added a new state to track if the scroller is at the top. - Implemented a scroll event listener to update the scroller state. - Updated SettingsTitle component styling based on scroller position for improved visual feedback. Signed-off-by: Innei --- .../settings/modal/SettingModalContent.tsx | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/desktop/layer/renderer/src/modules/settings/modal/SettingModalContent.tsx b/apps/desktop/layer/renderer/src/modules/settings/modal/SettingModalContent.tsx index 3bf62ed84..dfbc995af 100644 --- a/apps/desktop/layer/renderer/src/modules/settings/modal/SettingModalContent.tsx +++ b/apps/desktop/layer/renderer/src/modules/settings/modal/SettingModalContent.tsx @@ -1,5 +1,5 @@ import { ScrollArea } from "@follow/components/ui/scroll-area/index.js" -import { cn } from "@follow/utils" +import { clsx, cn } from "@follow/utils" import { repository } from "@pkg" import type { FC } from "react" import { @@ -51,6 +51,7 @@ const Content: FC<{ const pages = getSettingPages() const { Component, loader } = pages[key] + const [scrollerAtTop, setScrollerAtTop] = useState(true) const [scroller, setScroller] = useState(null) const pendingSectionRef = useRef(initialSection ?? null) @@ -67,6 +68,17 @@ const Content: FC<{ } }, [key, scroller]) + useEffect(() => { + if (!scroller) return + const handler = () => { + setScrollerAtTop(scroller.scrollTop < 20) + } + scroller.addEventListener("scroll", handler) + return () => { + scroller.removeEventListener("scroll", handler) + } + }, [scroller]) + const scrollToSection = useCallback( (sectionId: string) => { if (!sectionId) return false @@ -99,7 +111,13 @@ const Content: FC<{ return ( - +