feat:解决强制滚动的问题
This commit is contained in:
@ -556,6 +556,19 @@ export function getMessageAreaScript(): string {
|
|||||||
return toolNameMap[toolName] || toolName;
|
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) {
|
function addMessage(text, sender) {
|
||||||
const div = document.createElement('div');
|
const div = document.createElement('div');
|
||||||
@ -602,7 +615,7 @@ export function getMessageAreaScript(): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
messagesEl.appendChild(div);
|
messagesEl.appendChild(div);
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
|
|
||||||
// 添加消息后检查 header 显示状态
|
// 添加消息后检查 header 显示状态
|
||||||
checkHeaderVisibility();
|
checkHeaderVisibility();
|
||||||
@ -672,8 +685,8 @@ export function getMessageAreaScript(): string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 滚动到底部
|
// 智能滚动到底部
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 完成流式消息
|
// 完成流式消息
|
||||||
@ -699,7 +712,7 @@ export function getMessageAreaScript(): string {
|
|||||||
currentStreamingMessage = null;
|
currentStreamingMessage = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 显示加载指示器
|
// 显示加载指示器
|
||||||
@ -715,7 +728,7 @@ export function getMessageAreaScript(): string {
|
|||||||
<span class="loading-text">\${text}</span>
|
<span class="loading-text">\${text}</span>
|
||||||
\`;
|
\`;
|
||||||
messagesEl.appendChild(loadingIndicator);
|
messagesEl.appendChild(loadingIndicator);
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 隐藏加载指示器
|
// 隐藏加载指示器
|
||||||
@ -930,8 +943,8 @@ export function getMessageAreaScript(): string {
|
|||||||
currentSegmentedMessage = null;
|
currentSegmentedMessage = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 滚动到底部
|
// 智能滚动到底部
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 渲染分段消息(兼容旧代码)
|
// 渲染分段消息(兼容旧代码)
|
||||||
@ -1067,7 +1080,7 @@ export function getMessageAreaScript(): string {
|
|||||||
container.appendChild(actionsDiv);
|
container.appendChild(actionsDiv);
|
||||||
|
|
||||||
messagesEl.appendChild(container);
|
messagesEl.appendChild(container);
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 格式化文本(支持 Markdown)
|
// 格式化文本(支持 Markdown)
|
||||||
@ -1138,7 +1151,7 @@ export function getMessageAreaScript(): string {
|
|||||||
\${detail ? \`<div class="tool-detail">\${detail}</div>\` : ''}
|
\${detail ? \`<div class="tool-detail">\${detail}</div>\` : ''}
|
||||||
\`;
|
\`;
|
||||||
messagesEl.appendChild(div);
|
messagesEl.appendChild(div);
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
|
|
||||||
// 添加消息后检查 header 显示状态
|
// 添加消息后检查 header 显示状态
|
||||||
checkHeaderVisibility();
|
checkHeaderVisibility();
|
||||||
@ -1198,7 +1211,7 @@ export function getMessageAreaScript(): string {
|
|||||||
div.appendChild(customContainer);
|
div.appendChild(customContainer);
|
||||||
|
|
||||||
messagesEl.appendChild(div);
|
messagesEl.appendChild(div);
|
||||||
messagesEl.scrollTop = messagesEl.scrollHeight;
|
smartScrollToBottom();
|
||||||
|
|
||||||
// 添加消息后检查 header 显示状态
|
// 添加消息后检查 header 显示状态
|
||||||
checkHeaderVisibility();
|
checkHeaderVisibility();
|
||||||
|
|||||||
Reference in New Issue
Block a user