diff --git a/src/modules/mileage/MonitoringView.tsx b/src/modules/mileage/MonitoringView.tsx index 8912048..2a8d688 100644 --- a/src/modules/mileage/MonitoringView.tsx +++ b/src/modules/mileage/MonitoringView.tsx @@ -196,18 +196,20 @@ export default function MonitoringView() { return () => observer.disconnect(); }, []); - // 回到顶部按钮 + // 回到顶部按钮:用 IntersectionObserver 检测顶部哨兵是否离开视口 + const topSentinelRef = useRef(null); useEffect(() => { - const handleScroll = () => { - const scrollY = window.scrollY || document.documentElement.scrollTop; - setShowBackToTop(scrollY > 400); - }; - window.addEventListener('scroll', handleScroll, { passive: true }); - return () => window.removeEventListener('scroll', handleScroll); + const el = topSentinelRef.current; + if (!el) return; + const observer = new IntersectionObserver( + ([entry]) => setShowBackToTop(!entry.isIntersecting), + ); + observer.observe(el); + return () => observer.disconnect(); }, []); const scrollToTop = () => { - window.scrollTo({ top: 0, behavior: 'smooth' }); + topSentinelRef.current?.scrollIntoView({ behavior: 'smooth' }); }; const filteredVehicles = vehicles; @@ -228,6 +230,9 @@ export default function MonitoringView() { return ( <> + {/* 顶部哨兵:离开视口时显示回到顶部按钮 */} +
+ {/* Fullscreen Landscape View Overlay */} {isFullscreen && (