From b7b254546cbb1b6a0d6d07d33c0e37f9d6a323a7 Mon Sep 17 00:00:00 2001 From: kkfluous Date: Wed, 1 Apr 2026 23:52:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=B9=E8=BF=9B=E7=80=91=E5=B8=83?= =?UTF-8?q?=E6=B5=81=E6=BB=9A=E5=8A=A8=E5=92=8C=E5=9B=9E=E5=88=B0=E9=A1=B6?= =?UTF-8?q?=E9=83=A8=E7=9A=84=E5=8F=AF=E9=9D=A0=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 ref 避免 loadMore 依赖导致事件重复注册 - 同时监听 window 和 document 的 scroll 事件 - 降低回到顶部按钮触发阈值到 400px - 增大触底检测距离到 300px Co-Authored-By: Claude Opus 4.6 (1M context) --- src/modules/mileage/MonitoringView.tsx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/modules/mileage/MonitoringView.tsx b/src/modules/mileage/MonitoringView.tsx index 6117266..eb6d780 100644 --- a/src/modules/mileage/MonitoringView.tsx +++ b/src/modules/mileage/MonitoringView.tsx @@ -179,19 +179,26 @@ export default function MonitoringView() { }, [loadFirstPage]); // 滚动触底检测 + 回到顶部按钮 + const loadMoreRef = useRef(loadMore); + loadMoreRef.current = loadMore; + useEffect(() => { const handleScroll = () => { - const scrollY = window.scrollY; - setShowBackToTop(scrollY > 600); + const scrollY = window.scrollY || document.documentElement.scrollTop; + setShowBackToTop(scrollY > 400); const scrollHeight = document.documentElement.scrollHeight; const clientHeight = window.innerHeight; - if (scrollHeight - scrollY - clientHeight < 200) { - loadMore(); + if (scrollHeight - scrollY - clientHeight < 300) { + loadMoreRef.current(); } }; window.addEventListener('scroll', handleScroll, { passive: true }); - return () => window.removeEventListener('scroll', handleScroll); - }, [loadMore]); + document.addEventListener('scroll', handleScroll, { passive: true }); + return () => { + window.removeEventListener('scroll', handleScroll); + document.removeEventListener('scroll', handleScroll); + }; + }, []); const scrollToTop = () => { window.scrollTo({ top: 0, behavior: 'smooth' });