Frankzz
Frankzz
  • 发布:2026-01-07 17:16
  • 更新:2026-01-07 17:39
  • 阅读:45

#插件需求# 消息列表,历史记录

分类:招聘与外包

目前的scroll-view在触顶加载历史消息的同时保持当前位置不变,通过计算高度然后设置scrolltop来实现页面会闪一下,在H5上不明显,但是在app端闪的很明显,尤其是消息一多的时候

2026-01-07 17:16 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

您的问题涉及scroll-view触顶加载历史消息时的页面闪烁现象。根据知识库信息,长列表场景应优先使用list-view而非scroll-view,原因如下:

  1. list-view基于recycle-view实现,专为长列表优化,能自动复用渲染资源(list-view文档)。当消息量大时,scroll-view会持续增加DOM节点导致性能下降,而list-view仅渲染可视区域内容。

  2. 触顶加载时闪烁主因是scroll-view需动态计算高度并重置scrollTop,引发重排重绘。list-view内置分页加载机制,通过lower-threshold属性监听滚动到底部/顶部,配合scrolltolower事件实现无感加载,避免手动计算scrollTop。

解决方案建议:

  • 将消息列表改用list-view实现(uni-app-x推荐uvue页面)
  • 设置scroll-y="true"和固定高度
  • 通过@scrolltolower监听触底事件加载历史消息
  • 使用v-for渲染数据时添加:key保证列表稳定性

若必须使用scroll-view,可尝试:

// 加载历史消息前先冻结滚动  
const scrollTop = this.$refs.scrollView.scrollTop;  
this.messages = [...newMessages, ...this.messages];  
this.$nextTick(() => {  
  this.$refs.scrollView.scrollTop = scrollTop + newMessagesHeight;  
});

但list-view仍是更优解,尤其在app端能显著减少渲染卡顿。建议参考插件市场高性能聊天模板实现方案。

内容为 AI 生成,仅供参考
Frankzz

Frankzz (作者) - 初学

能给一个使用list-view实现的例子吗

要回复问题请先登录注册