From ef83016b7fc05071e4d08a3789656f9494a3c01c Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Thu, 25 Dec 2025 11:00:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=A7=A3=E5=86=B3=E5=BC=BA=E5=88=B6?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/messageArea.ts | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/views/messageArea.ts b/src/views/messageArea.ts index f88f87f..9a73e05 100644 --- a/src/views/messageArea.ts +++ b/src/views/messageArea.ts @@ -556,6 +556,19 @@ export function getMessageAreaScript(): string { return toolNameMap[toolName] || toolName; } + // 检查用户是否在底部附近(允许50px的误差) + function isUserNearBottom() { + const threshold = 50; + return messagesEl.scrollHeight - messagesEl.scrollTop - messagesEl.clientHeight < threshold; + } + + // 智能滚动:只有用户在底部附近时才自动滚动 + function smartScrollToBottom() { + if (isUserNearBottom()) { + messagesEl.scrollTop = messagesEl.scrollHeight; + } + } + // 添加消息 function addMessage(text, sender) { const div = document.createElement('div'); @@ -602,7 +615,7 @@ export function getMessageAreaScript(): string { } messagesEl.appendChild(div); - messagesEl.scrollTop = messagesEl.scrollHeight; + smartScrollToBottom(); // 添加消息后检查 header 显示状态 checkHeaderVisibility(); @@ -672,8 +685,8 @@ export function getMessageAreaScript(): string { } } - // 滚动到底部 - messagesEl.scrollTop = messagesEl.scrollHeight; + // 智能滚动到底部 + smartScrollToBottom(); } // 完成流式消息 @@ -699,7 +712,7 @@ export function getMessageAreaScript(): string { currentStreamingMessage = null; } - messagesEl.scrollTop = messagesEl.scrollHeight; + smartScrollToBottom(); } // 显示加载指示器 @@ -715,7 +728,7 @@ export function getMessageAreaScript(): string { \${text} \`; messagesEl.appendChild(loadingIndicator); - messagesEl.scrollTop = messagesEl.scrollHeight; + smartScrollToBottom(); } // 隐藏加载指示器 @@ -930,8 +943,8 @@ export function getMessageAreaScript(): string { currentSegmentedMessage = null; } - // 滚动到底部 - messagesEl.scrollTop = messagesEl.scrollHeight; + // 智能滚动到底部 + smartScrollToBottom(); } // 渲染分段消息(兼容旧代码) @@ -1067,7 +1080,7 @@ export function getMessageAreaScript(): string { container.appendChild(actionsDiv); messagesEl.appendChild(container); - messagesEl.scrollTop = messagesEl.scrollHeight; + smartScrollToBottom(); } // 格式化文本(支持 Markdown) @@ -1138,7 +1151,7 @@ export function getMessageAreaScript(): string { \${detail ? \`
\${detail}
\` : ''} \`; messagesEl.appendChild(div); - messagesEl.scrollTop = messagesEl.scrollHeight; + smartScrollToBottom(); // 添加消息后检查 header 显示状态 checkHeaderVisibility(); @@ -1198,7 +1211,7 @@ export function getMessageAreaScript(): string { div.appendChild(customContainer); messagesEl.appendChild(div); - messagesEl.scrollTop = messagesEl.scrollHeight; + smartScrollToBottom(); // 添加消息后检查 header 显示状态 checkHeaderVisibility();