fix(admin): 日志页默认定位到最新而非最早 #18
@@ -53,20 +53,21 @@ export default function LogsPage() {
|
|||||||
}, [load])
|
}, [load])
|
||||||
|
|
||||||
const scrollRef = useRef<HTMLDivElement>(null)
|
const scrollRef = useRef<HTMLDivElement>(null)
|
||||||
const userScrolledUp = useRef(false)
|
const userScrolledDown = useRef(false)
|
||||||
|
|
||||||
// 检测用户是否向上滚动过
|
// 检测用户是否向下滚动回看历史(旧日志在下方)
|
||||||
const handleScroll = () => {
|
const handleScroll = () => {
|
||||||
const el = scrollRef.current
|
const el = scrollRef.current
|
||||||
if (!el) return
|
if (!el) return
|
||||||
const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 50
|
const atTop = el.scrollTop < 50
|
||||||
userScrolledUp.current = !atBottom
|
userScrolledDown.current = !atTop
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载后自动滚动到底部(仅当用户未向上滚动时)
|
// 列表最新在最上面(后端倒序返回);打开页面/自动刷新时定位到顶部=最新。
|
||||||
|
// 用户向下滚动回看历史时暂停定位,拉回顶部即恢复。
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (autoRefresh && !userScrolledUp.current && scrollRef.current) {
|
if (autoRefresh && !userScrolledDown.current && scrollRef.current) {
|
||||||
scrollRef.current.scrollTop = scrollRef.current.scrollHeight
|
scrollRef.current.scrollTop = 0
|
||||||
}
|
}
|
||||||
}, [entries, autoRefresh])
|
}, [entries, autoRefresh])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user