根因链: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> |
||
|---|---|---|
| .. | ||
| static | ||
| __init__.py | ||
| admin.py | ||
| app.py | ||
| auth.py | ||
| broker.py | ||
| pptx_render.py | ||
| sinks.py | ||
| static_files.py | ||