1. 长会话如何用虚拟列表和稳定锚点渲染,流式增长时怎样避免滚动跳动
长会话如何用虚拟列表和稳定锚点渲染,流式增长时怎样避免滚动跳动?
- 虚拟列表的渲染范围控制
- 稳定锚点(scroll anchoring)机制
- 流式增长时保持滚动位置
长会话用虚拟列表只渲染可视区 + 缓冲区的消息,避免大量 DOM。防滚动跳动:消息节点用稳定的 key 和固定/可预测的占位高度,使用 CSS overflow-anchor 或手动 scroll anchoring 锚定到当前可见消息;流式增长时新内容追加在底部或顶部,若用户在看历史则锚定当前消息,若停在底部则自动跟随最新内容。用 IntersectionObserver 感知"是否在底部",配合 scrollIntoView 或直接调整 scrollTop 保持位置。
滚动跳动来自内容增长导致布局偏移。虚拟列表减少 DOM 规模,锚定机制保证追加内容时当前视口不跳。区分"用户是否在看底部"决定是否自动滚动,是流式聊天 UX 的关键。