uniapp聊天界面滚动到底部

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

自我记录

技术实现方案: 通过scroll-into-view 指定ID滚动到指定区域并添加scroll-with-animation动画
目前我一共两种方式:
方案1:在scroll-view 底部放置一个空标签 每次发送消息||接收消息就滚动到底部
方案2:前提条件(我这边与后端交互是我发送完消息他那边处理之后统一给我本人消息+客服消息)
所以因为交互时间问题,我这边会生成一个临时对话消息push到数组最后一项,接收到消息在pop并push新数据
最终就是我在生成临时数据时写好一个id 就实现了 滚动到指定id(好处是不用在页面底部放置空标签)坏处是频繁操作数组,由于业务场景问题没办法!

方案一

<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更新之后在滚动

// 滚动指定元素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()
}

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

回答: 在uniapp聊天界面中,有一些常见的问题需要注意。首先,在键盘高度变化时,需要根据实际情况调整聊天框的位置,以避免键盘和聊天输入框之间的距离过大。可以通过监听键盘高度变化事件来实现这一功能。\[1\]其次,为了避免底部聊天框遮挡最底部的消息,需要在聊天框外再套一层有固定高度的view来占位。这样可以确保聊天内容溢出时,页面可以正常滚动到最底部,显示完整的聊天消息。\[2\]此外,当设置scroll-view中的scroll-with-animation为true时,发送聊天消息会有一个过渡的动画效果。由于动画的时长比滚动底部的函数的延时要长,可能会导致发送的聊天消息在动画未完成时出现回弹,页面不能完整显示出聊天消息。\[3\]因此,需要注意在发送消息时,确保动画已完成后再执行滚动底部的函数,以避免这个问题的发生。 #### 引用[.reference_title] - *1* *3* [【uni-appuni-app实现聊天页面功能——功能篇(下)](https://blog.csdn.net/qq_51250105/article/details/130221088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【uni-appuni-app实现聊天页面功能(小程序)——布局篇](https://blog.csdn.net/qq_51250105/article/details/130084841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值