uniapp聊天界面滚动到底部

uniapp中scroll-view聊天界面滚动到底部展示最新消息

自我记录

技术实现方案: 通过scroll-into-view 指定ID滚动到指定区域并添加scroll-with-animation动画

目前我一共两种方式:
方案1:在scroll-view 底部放置一个空标签 每次发送消息||接收消息就滚动到底部
方案2:前提条件(我这边与后端交互是我发送完消息他那边处理之后统一给我本人消息+客服消息)

所以因为交互时间问题,我这边会生成一个临时对话消息push到数组最后一项,接收到消息在pop并push新数据

最终就是我在生成临时数据时写好一个id 就实现了 滚动到指定id(好处是不用在页面底部放置空标签)坏处是频繁操作数组,由于业务场景问题没办法!

方案一

html 复制代码
<scroll-view
  scroll-y
  class="scroll-view-main"
  @scroll="onScroll"
  scroll-with-animation
  :scroll-into-view="scrollId"
>
<!-- xxxxx 消息内容 -->
<!-- xxxxx 消息内容 -->
<!-- xxxxx 消息内容 -->
<!-- xxxxx 消息内容 -->

  <!-- 显示最新消息 -->
  <view id="msg-001"/>
</scroll-view>

发送消息后调用+接收消息时调用

注意在接收数据赋值之后 记得要有 await nextTick() 为了确保dom更新之后在滚动

js 复制代码
// 滚动指定元素ID
const scrollId = ref<string>()

// 处理滚动位置事件
const handleScrollLocation = async (id: number | undefined) => {
  scrollId.value = id ? `msg-${id}` : undefined
  await nextTick()
  scrollId.value = undefined
}

// 发送消息公共方法
const handleSendCommon = (val: string) => {
  infoParams.value.question = val
  // 创建临时数组
  const TEMP_ITEM: ChatWriteMsgItem = {
    messageId: 999,
    role: 'user',
    message: val,
    createTime: moment().format('YYYY-MM-DD hh:mm:ss'),
  }
  handleScrollLocation(TEMP_ITEM.messageId)
  handleChatWrite()
}

如有转载 请备注原文地址!

相关推荐
子兮曰23 分钟前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰28 分钟前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁2 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
MoonMoonLee3 小时前
小程序配置
小程序
汉堡大王95274 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 小时前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端