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

vue实现对话框指定某个对话内容的滚动到指定位置(滚动到可视区域的中间位置)

1、使用el-scrollbar实现定位滚动(elementui组件库)
如何滚动:参考链接
比如说指定某条对话内容滚动到可视区域的中间
html结构:

    <div class="chat-list" id="chat-list">
      <el-scrollbar ref="scroll" style="height: 100%;">
        <div v-if="chatListAll.length === 0 && !callEnd" style="color: rgba(0, 0, 0, 0.4); text-align: center;">暂无对话</div>
        <chat-item
          v-for="(chat, index) in chatListAll"
          :key="index"
          :chat="chat"
					:searchKey="searchKey"
          ref="chat"
          :class="chat.isActive ? 'active' : ''"
        />

        <div v-if="callEnd" style="color: rgba(0, 0, 0, 0.4); text-align: center;">本次通话已结束</div>
      </el-scrollbar>
    </div>

js计算滚动的代码:

		scrollUncivilized(data) {
			this.$nextTick(() => {
				let chatDiv = document.querySelector('#chat-list');
				console.log(chatDiv.offsetHeight);
				// const parentHeight = chatDiv.offsetHeight - 48; // 减去上下padding
				const parentHeight = chatDiv.clientHeight; // 直接获取可视区域的高度
				if (this.chatListAll.length) {
					const index = this.chatListAll.findIndex(item => item.warning === data);
					if (index > -1) {
						const itemOffsetTop = this.$refs.chat[index].$el.offsetTop; // item顶部到父元素顶部的距离
						const itemOffsetHeight = this.$refs.chat[index].$el.offsetHeight; // 元素本身的高度
						// if (this.$refs.chat[index].$el.offsetTop > parentHeight) {
						this.$refs['scroll'].wrap.scrollTop = itemOffsetTop - (parentHeight - itemOffsetHeight) / 2;
						// }
						// this.$refs.chat[index].$el.scrollIntoView(true);
						console.log(this.$refs['scroll'].wrap.scrollTop);
					}
				}
			});
		},

2、使用ScrollIntoView滚动到可视区域
如果对滚动的位置要求不高,只是滚动到可视区域内,可以使用ScrollIntoView滚动到可视区域的顶部或底部
参考链接

参考识别:scrollTop、offsetTop、offsetHeight、clientHeight等
vue实现聊天框自动滚动参考链接


http://www.kler.cn/a/145384.html

相关文章:

  • 实验七 带函数查询和综合查询(2)
  • 免杀国内主流杀软的恶意样本分析
  • Ollama 运行从 ModelScope 下载的 GGUF 格式的模型
  • Spring事务和事务传播机制
  • sunrays-framework配置重构
  • 从腾讯云数据仓库TCHouse安全地转移数据到AWS Redshift
  • Datax安装部署及读取MYSQL写入HDFS
  • PowerShell基础
  • VBA技术资料MF86:将PPT文件批量另存为PDF文件
  • Effective Modern C++(1.顶层const与底层const)
  • java线程中,join()方法?
  • Vue 或者 React 中,什么情况下会用 Es6 的 Class类
  • 02 RANSAC算法 及 Python 实现
  • 电商项目高级篇-03 商品上架
  • Elasticsearch集群部署,配置head监控插件
  • 【spring(五)】SpringMvc总结 SSM整合流程
  • GitHub上8个强烈推荐的 Python 项目
  • Vue-报错No “exports“ main defined in xx
  • Leetcode.1590 使数组和能被 P 整除
  • Spring面向切面编程(AOP);Spring控制反转(IOC);解释一下Spring AOP里面的几个名词;Spring 的 IoC支持哪些功能
  • Java中wait()方法在synchronized方法中调用的奥秘
  • php订单发起退款(余额和微信支付)
  • STL: 容器适配器stack 与 queue
  • 什么是proxy代理?
  • NX二次开发UF_CURVE_ask_joined_parms 函数介绍
  • 存算一体还是存算分离?谈谈数据库基础设施的架构选择