From f9b3699bdab3c0f28fc71e8b708d62df78677359 Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Fri, 9 Jan 2026 18:15:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=A7=A3=E5=86=B3=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E9=81=87=E5=88=B0=E5=A4=A7=E7=9A=84=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E6=97=B6=E5=80=99=E5=A4=B1=E6=95=88=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/messageArea.ts | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/views/messageArea.ts b/src/views/messageArea.ts index 1345a22..9b7f350 100644 --- a/src/views/messageArea.ts +++ b/src/views/messageArea.ts @@ -737,16 +737,39 @@ export function getMessageAreaScript(): string { return toolNameMap[toolName] || toolName; } + // 自动滚动控制标志 + let shouldAutoScroll = true; + let lastScrollHeight = 0; + // 检查用户是否在底部附近(允许50px的误差) function isUserNearBottom() { const threshold = 50; return messagesEl.scrollHeight - messagesEl.scrollTop - messagesEl.clientHeight < threshold; } - // 智能滚动:只有用户在底部附近时才自动滚动 + // 监听用户滚动行为 + messagesEl.addEventListener('scroll', () => { + const isAtBottom = isUserNearBottom(); + + // 如果用户滚动到底部,恢复自动滚动 + if (isAtBottom) { + shouldAutoScroll = true; + } else { + // 只有当内容高度没有变化时,才认为是用户主动滚动 + // 如果内容高度变化了,说明是因为新内容导致的位置变化,不应该停止自动滚动 + if (messagesEl.scrollHeight === lastScrollHeight) { + shouldAutoScroll = false; + } + } + + lastScrollHeight = messagesEl.scrollHeight; + }); + + // 智能滚动:只有在允许自动滚动时才滚动到底部 function smartScrollToBottom() { - if (isUserNearBottom()) { + if (shouldAutoScroll) { messagesEl.scrollTop = messagesEl.scrollHeight; + lastScrollHeight = messagesEl.scrollHeight; } }