当前位置: 首页 > news >正文

uni-app 聊天界面滚动到消息底部

目录

问题

组件

页面

使用的API

总结


问题

当你发一个消息,但是消息却需要你自己向下滑你才能看见,否则一直呗输入框挡住。

组件

scroll-view组件:一般使用scroll-view组件的都采取使用其scroll-into-view或者scroll-to属性。

scroll-top属性需要计算父容器和子容器的高度差,scroll-into-view我只能说非常难用,特别是ID这个限制,我在v-for中为每个聊天信息设置id,使用index最大的拼接出最底层消息的id,结果没有效果...

页面

<scroll-view scroll-y="true"  :scroll-top="scrollTop" id="scroll" class="scroll" @tap="Extend =false "> <view class="content" id="chatList"><view class="Chat"><view v-for="(item, index) in historyChat" :key="index"><chat :img_path="item.imgPath" :meg="item.message" :is_robot="item.robot" class="chats"></chat></view></view></view></scroll-view>

 chat是我自己封装的组件,没公布,写法可以参考我之前的文章http://t.csdnimg.cn/Di6Xo


 

使用的API

  • 主角:uni.pageScrollTo 

        这个API的描述是可以将页面滚动到目标位置(单位px)。可以指定滚动到具体的scrollTop数值,也可以指定滚动到某个元素的位置。

        注意:这个滚动的位置是从页面的顶部开始计算的

  • 配角:uni.createSelectorQuery():

这个方法返回一个SelectorQuery对象实例,其通过绑定id,返回一个 NodesRef 对象实例,可以用于获取节点信息。

idString节点的 ID
datasetObject节点的 dataset
leftNumber节点的左边界坐标
rightNumber节点的右边界坐标
topNumber节点的上边界坐标
bottomNumber节点的下边界坐标
widthNumber节点的宽度
heightNumber节点的高度

而 NodesRef 对象带有boundingClientRect方法可以获取某个节点信息。

总结

那么思路已经很清晰了,使用uni.pageScrollTo 让滚动到目标位置(scrollTop)设置为页面的高度不就可以了?

uni.createSelectorQuery()锁定scroll-view的id,使用 NodesRef 对象返回的只有height信息

// 滚动至聊天底部scrollToBottom: function(){const query = uni.createSelectorQuery();query.select('#scroll').boundingClientRect((rect) => {if (rect) {uni.pageScrollTo({scrollTop: rect.height,duration: 300 // 滚动动画持续时间,单位 ms});}});query.exec();},

http://www.lryc.cn/news/442285.html

相关文章:

  • 学习风格的类型
  • GCP容器镜像仓库使用
  • 【C++ Primer Plus习题】16.10
  • Django框架全面指南
  • git 更新LingDongGui问题解决
  • Thymeleaf模版引擎
  • jpa适配mysql切换达梦可能的坑
  • 922. 按奇偶排序数组 II 双指针 力扣
  • Vue接入高德地图并实现基本的路线规划功能
  • linux网络编程4
  • Spring模块详解Ⅳ(Spring ORM和Spring Transaction)
  • 深度图可视化显示(kitti)
  • 【Kubernetes知识点】HPA如何控制不同的资源实现自动扩缩容?
  • adb devices不显示连接设备怎么解决
  • 经典sql题(一)求连续登录不少于三天用户
  • 2024java面试-软实力篇
  • 「OC」present和push操作区别以及混合推出的实现
  • 【高分系列卫星简介】
  • 八股文-多线程、并发
  • xtu oj 折纸
  • 传知代码-多示例AI模型实现病理图像分类
  • Java知识点小结3:内存回收
  • LeetCode746:使用花费最小爬楼梯
  • 列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()
  • 【资料分析】刷题日记3
  • 基于SpringBoot+Vue的商场停车场管理系统
  • 4. 密码协议
  • 基于嵌入式的智能物流柜( 触摸屏/0.96寸oled屏)
  • VSCode创建C++项目和编译多文件
  • 7个提升网站分页体验的 CSS 和 JavaScript 代码片段