根因链:loadMessagesAround 后 renderMessages 尾部无条件滚底,把视口钉到 新窗口末尾;底部 sentinel 落在视口内立刻触发 loadNewerMessages,其整窗 重渲染(innerHTML 清空)删掉平滑滚动的目标元素、再把 scrollTop 恢复到 fetch 前位置——首次点击停在窗口底部附近,第二次点击才能到位。 - renderMessages 加 stickBottom 参数(默认 true 保持首屏/发送行为); loadEarlier/loadNewer/loadMessagesAround 三个调窗口路径传 false - jumpToMessage 重建窗口后用瞬时定位(auto),不给补载/图片异步撑高留 动画窗口期;已在 DOM 的近距离跳转保留平滑 - _msgScrollObserver 在 _outlineJumpLock 期间不补载;解锁时 _repokeMsgSentinels 对 sentinel unobserve+observe 补投一次交叉状态, 避免 sentinel 停留在视口内时解锁后无人触发加载 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| js | ||
| vendor | ||
| admin.html | ||
| dev.html | ||
| wechat_bind.html | ||