当前位置: 首页 > 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();},

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • iftop流量监控工具
  • Unborn安装CUDA Toolkit 12.2
  • MySQL:事务的ACID特性隔离级别脏读、不可重复读、幻读、Next-Key锁——场景复现
  • 自定义类型:联合和枚举
  • 经典sql题(二)求连续登录最多天数用户
  • 【百日算法计划】:每日一题,见证成长(018)
  • Ubuntu 22.04 源码下载的几种方法
  • 项目中遇到的问题
  • 【论文阅读】Face2Diffusion for Fast and Editable Face Personalization
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(五)-聚合
  • GitHub每日最火火火项目(9.20)
  • 【简单点】docker如何部署tomcat
  • 线程池的类型
  • 掌握顶会流量密码!“Mamba+CNN”双热点组合!轻松找到创新点!
  • EP21 Promise封装request请求
  • 【面试系列】之二:关于js原型
  • 【前端学习】-粗谈选择器
  • bearychat的java client
  • CentOS 7 防火墙操作
  • DataBase in Android
  • ESLint简单操作
  • Hexo+码云+git快速搭建免费的静态Blog
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JAVA 学习IO流
  • Java精华积累:初学者都应该搞懂的问题
  • k8s如何管理Pod
  • nodejs:开发并发布一个nodejs包
  • NSTimer学习笔记
  • python学习笔记 - ThreadLocal
  • React 快速上手 - 07 前端路由 react-router
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • session共享问题解决方案
  • Spark学习笔记之相关记录
  • Vue实战(四)登录/注册页的实现
  • 初识 webpack
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于axios的vue插件,让http请求更简单
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 爬虫模拟登陆 SegmentFault
  • 协程
  • HanLP分词命名实体提取详解
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​2020 年大前端技术趋势解读
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #include到底该写在哪
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • ${factoryList }后面有空格不影响
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (7)摄像机和云台
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (webRTC、RecordRTC):navigator.mediaDevices undefined