mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-13 03:13:41 +08:00
fix: avoid auto-scroll while reading history (#61)
This commit is contained in:
parent
2ab0bd000b
commit
32fe582b82
@ -96,9 +96,12 @@ export function useStickToBottom(
|
||||
|
||||
// 等待滚动完成
|
||||
await new Promise<void>((resolve) => {
|
||||
const startedAt = performance.now()
|
||||
const checkScrollEnd = () => {
|
||||
if (Math.abs(element.scrollTop - targetScrollTop) < 1) {
|
||||
if (!isScrolling || Math.abs(element.scrollTop - targetScrollTop) < 1
|
||||
|| performance.now() - startedAt > opts.duration * 2) {
|
||||
isScrolling = false
|
||||
lastScrollTop = element.scrollTop
|
||||
resolve()
|
||||
} else {
|
||||
requestAnimationFrame(checkScrollEnd)
|
||||
@ -110,6 +113,7 @@ export function useStickToBottom(
|
||||
// 直接滚动
|
||||
element.scrollTop = targetScrollTop
|
||||
isScrolling = false
|
||||
lastScrollTop = element.scrollTop
|
||||
}
|
||||
|
||||
isAtBottom.value = true
|
||||
@ -123,7 +127,11 @@ export function useStickToBottom(
|
||||
|
||||
// 处理滚动事件
|
||||
const handleScroll = () => {
|
||||
if (!scrollRef.value || isScrolling) return
|
||||
if (!scrollRef.value) return
|
||||
if (isScrolling) {
|
||||
lastScrollTop = scrollRef.value.scrollTop
|
||||
return
|
||||
}
|
||||
|
||||
const element = scrollRef.value
|
||||
const currentScrollTop = element.scrollTop
|
||||
@ -141,7 +149,7 @@ export function useStickToBottom(
|
||||
}
|
||||
|
||||
// 向下滚动到底部,恢复自动滚动
|
||||
if (isScrollingDown && isNearBottom.value) {
|
||||
if ((isScrollingDown || checkIsAtBottom()) && isNearBottom.value) {
|
||||
escapedFromLock.value = false
|
||||
isAtBottom.value = true
|
||||
}
|
||||
@ -149,11 +157,13 @@ export function useStickToBottom(
|
||||
|
||||
// 处理鼠标滚轮
|
||||
const handleWheel = (e: WheelEvent) => {
|
||||
if (!scrollRef.value || !escapedFromLock.value) return
|
||||
if (!scrollRef.value) return
|
||||
|
||||
// 如果用户向上滚动,确保我们记录这个行为
|
||||
if (e.deltaY < 0) {
|
||||
isScrolling = false
|
||||
escapedFromLock.value = true
|
||||
isAtBottom.value = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user