el-table表格自动滚动

实现效果如下:

功能点:

1. 当表格内容超出时,自动滚动,滚动到最后一条之后在从头滚动。

2. 表格中的数据会定时刷新,刷新后数据更新。

3. 鼠标移入表格中,停止滚动;移出后,继续滚动。

4. 点击表格中的排序功能,拉取后端数据,从头滚动。

先说一说实现过程中遇到的大坑吧 

坑1: vue-seamless-scroll依赖的使用

1. 安装并对应引入

yarn add vue-seamless-scroll

局部引入:

import vueSeamlessScroll from "vue-seamless-scroll";components: { vueSeamlessScroll },

2. 使用

用该组件包住要滚动的表格,并将表格数据传进去

参数:tableData是我的表格数据数组,defineScroll是滚动的参数,参考如下:

 代码:

classOption() {return {step: 0.5, // 数值越大速度滚动越快limitMoveNum: 5, // 开始无缝滚动的数据量hoverStop: true, // 是否开启鼠标悬停stopdirection: 1, // 0向下 1向上 2向左 3向右openWatch: true, // 开启数据实时监控刷新domsingleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3waitTime: 500, // 单步运动停止的时间(默认值1000ms)};},

3. 实际效果:

表头也会跟着滚动,要想表头不滚动很简单,利用两个表格组件,

        a. 需要滚动的表格去掉表头,用vueSeamlessScroll 组件包着,        

        b. 将另一个表格放在vueSeamlessScroll 组件外边,只显示表格标题。

除此之外这个组件有个缺陷:数据更新的时候,dom却不会更新。

如上图,当数据量从17变为15时,滚动的dom的高度依旧是17的高度。为了解决这个问题,可以利用v-if的强制刷新。在数据有更新时先将updateFlag设为false,过100毫秒再设为true。

 如此,基本上能保证正常显示所有的数据。但强制刷新会使得滚动进度刷新,从头开始滚。

看似很完美,但是坑在业务场景了,我们这边的数据刷新频率在10秒左右,也就意味着在我们的业务场景中只会看到前几条数据,因为每次数据更新,都会从头滚动。

基于此我放弃了该依赖的使用。

 坑2: 使用scrollTop属性,找不到表格的bodyWrapper

看了好多文章,都说直接取用this.$refs.myTable.bodyWrapper,搁我这就直接报错,就找不着这个bodyWrapper。

实际实现步骤

主要实现逻辑使用的是操作表格体的滚动条,也就是坑2中找不到的bodyWrapper。

1. 找到要操作的dom节点

 具体操作如上图,找到表格体的外层dom节点,有滚动条属性。然后点击右键将该节点显示在控制台上,修改该节点的scrollTop值,发现表格内容上移了,说明我们找对了节点。

接下来就是在代码中找到该节点,给表格加一个ref="tableData",然后你可以打印一下this.$refs.tableData,手动找一下刚刚在控制台操作的那个元素,我的是this.$refs.tableData.$refs.bodyWrapperScrollbar.$refs.wrap,然后操作一下该元素的scrollTop属性,看是否能操作表格的滚动条,这里有一个坑:直接操作可能不会生效,需要一个定时器改动。

2. 控制该节点的scrollTop属性

整体代码如下:

封装了方法之后,在createdmounted调用该方法即可。

其中定时器中(1000 / 60) * 3是定时执行的时间,控制滚动的快慢,可以自定义时间。

除此之外还有个需求就是:鼠标移入表格区,暂停移动,鼠标移出表格区继续移动。

封装一个停止移动的方法,同时给表格增加方法:鼠标移入停止移动,出来之后继续移动。

除此之外,还有一个需求是:手动点击某一列的排序时,需要从头滚动,则需要一个参数scrollInitFlag,用来判断是否从头滚动,初始值为true,在排序方法中将该值设置为true,同时在autoScrollFn方法中增加逻辑,如下图:

 完整代码如下:

// 表格自动滚动autoScrollFn() {clearInterval(this.scrollTimer);this.$nextTick(() => {const tBody =this.$refs.tableData.$refs.bodyWrapperScrollbar.$refs.wrap;// 当可视窗口高度大于表格高度时,不滚动if (tBody.clientHeight > tBody.scrollHeight) {return;}if (this.scrollInitFlag) {tBody.scrollTop = 0;this.scrollInitFlag = false;}this.scrollTimer = setInterval(() => {tBody.scrollTop += 1; // 每次上滑一个像素// 当滚动到最底部(可视高度+距离顶部=整个高度)时,从头开始滚if (tBody.clientHeight + tBody.scrollTop === tBody.scrollHeight) {tBody.scrollTop = 0;}}, (1000 / 60) * 3); // 1000 / 60});},stopScrollFn() {clearInterval(this.scrollTimer);this.scrollTimer = null;},// 排序sortChangeFn({ column, prop, order }) {console.log(column, prop, order);// 调用后端接口this.getDataFn();this.scrollInitFlag = true;},

基本上完了,做完之后我发现文字滚动的时候会抖动,暂时还没有啥好的想法,还有页面缩放之后滚动也不生效了,后面再解决吧。

从实际应用来看,若是没有我这么频繁的数据刷新,还是用vue-seamless-scroll依赖吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VXLAN集中式网关部署(静态方式)

目录 1. 网络拓扑1.1 配置思路1.2 数据准备2. 配置Underlay网络2.1 配置CE12.2 配置CE22.3 配置CE32.4 查看OSPF结果2.5 配置LSW12.6 配置LSW23. 配置Overlay网络二层互通(同网段)3.1 配置CE13.2 配置CE23.3 配置CE33.4 Server13.5 Server23.6 Server33.7 Server43.8 抓包分析…

Kafka入门到起飞系列 - 副本机制,什么是副本因子呢?

我们一直在讲一个主题会有多个分区,这多个分区可以分布在一台服务器上,也可以分布在多台服务器上,还可以增加分区(Kafka目前只支持分区),这是Kafka提供的一种横向扩展的手段 比如我们创建了一个主题&#x…

YAML+PyYAML笔记 2 | YAML缩进、分离、注释简单使用

2 | YAML缩进、分离、注释简单使用 1 简介2 缩进3 分离4 多行文本4.1 折叠块4.2 字面块4.3 引用块 5 注释5.1 行内注释5.2 块注释5.3 完美注释示例 1 简介 YAML 不是一种标记语言,而是一种数据格式;使用缩进和分离来表示数据结构,不需要使用…

与 ChatGPT 进行有效交互的几种策略

在这篇文章中,您将了解即时工程。尤其, 如何在提示中提供对响应影响最大的信息什么是角色、正面和负面提示、零样本提示等如何迭代使用提示来利用 ChatGPT 的对话性质 废话不多说直接开始吧!!! 提示原则 快速工程是有…

Safari 查看 http 请求

文章目录 1、开启 Safari 开发菜单2、显示 JavaScript 控制台 1、开启 Safari 开发菜单 Safari 设置中,打开开发菜单选项 *** 选择完成后,Safari 的目录栏就会出现一个 开发 功能。 2、显示 JavaScript 控制台 开启页面后,在开发中选中 显…

【Linux后端服务器开发】数据链路层

目录 一、以太网 二、MAC地址 三、MTU 四、ARP协议 一、以太网 “以太网”不是一种具体的网路,而是一种技术标准:既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构、访问控制方式、传…

Android 在程序运行时申请权限——以自动拨打电话为例

Android 6.0及以上系统在使用危险权限时必须进行运行时权限处理。 main_activity.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://sche…

使用Python搭建代理服务器- 爬虫代理服务器详细指南

搭建一个Python爬虫代理服务器可以让你更方便地管理和使用代理IP。下面是一个详细的教程来帮助你搭建一个简单的Python爬虫代理服务器&#xff1a; 1. 首先&#xff0c;确保你已经安装了Python。你可以在官方网站(https://www.python.org/)下载并安装最新版本的Python。 2. 安…

本地Git仓库和GitHub仓库SSH传输

SSH创建命令解释 ssh-keygen 用于创建密钥的程序 -m PEM 将密钥的格式设为 PEM -t rsa 要创建的密钥类型&#xff0c;本例中为 RSA 格式 -b 4096 密钥的位数&#xff0c;本例中为 4096 -C “azureusermyserver” 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址…

序列化模块pickle和json有什么区别

目录 什么是序列化模块pickle 什么是序列化模块json pickle和json有什么区别 总结 什么是序列化模块pickle pickle是Python中的内置模块&#xff0c;用于将Python对象序列化和反序列化为字节流。它提供了一种将复杂的数据结构&#xff08;如列表、字典、类实例等&#xff0…

练习时长两年半的入侵检测

计算机安全的三大中心目标是&#xff1a;保密性 (Conf idential ity) 、完整性 (Integrity) 、可用性 (Availability) 。 身份认证与识别、访问控制机制、加密技术、防火墙技术等技术共同特征就是集中在系统的自身加固和防护上&#xff0c;属于静态的安全防御技术&#xff0c;…

GitHub Copilot:让开发编程变得像说话一样简单

引用&#xff1a; 人类天生就梦想、创造、创新。但今天&#xff0c;我们花太多时间被繁重的工作所消耗&#xff0c;花在消耗我们时间、创造力和精力的任务上。为了重新连接我们工作的灵魂&#xff0c;我们不仅需要一种更好的方式来做同样的事情&#xff0c;更需要一种全新的工…

Mysql-主从复制与读写分离

Mysql 主从复制、读写分离 一、前言&#xff1a;二、主从复制原理1.MySQL的复制类型2. MySQL主从复制的工作过程;3.MySQL主从复制延迟4. MySQL 有几种同步方式&#xff1a;5.Mysql应用场景 三、主从复制实验1.主从服务器时间同步1.1 master服务器配置1.2 两台SLAVE服务器配置 2…

配置tomcat内存大小(windows、linux)

一、参数说明 -Xms&#xff1a; JVM初始分配的堆内存 -Xmx&#xff1a; JVM最大允许分配的堆内存&#xff0c;按需分配 -XX:PermSize&#xff1a; JVM初始分配的非堆内存 -XX:MaxPermSize&#xff1a; JVM最…

【报错】sqli-labs靶场搭建出现“Unable to connect to the database: security”

问题描述 搭建sqli-labs靶场时&#xff0c;在配置好PHP和mysql以及db-creds.inc配置文件后 初始界面可以运行&#xff0c;但点击关卡报错 提示连接不到数据库 Unable to connect to the database: security解决方案&#xff1a; 1、数据库配置出错&#xff0c;先查看db-cre…

Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin

Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin 1. 前言Maven的两种打包方式 2. 流程图3. spring-boor-maven-plugin打包4. maven-jar-plugin/maven-dependency-plugin打包 1. 前言 Maven的两种打包方式 spring-boot-maven-plugin springboot默认打包方…

如何运用R语言进行Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

机器学习深度学习——softmax回归的简洁实现

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——softmax回归从零开始实现 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你…

Java 设计模式——原型模式

目录 1.概述2.结构3.实现3.1.浅拷贝3.2.深拷贝3.2.1.通过对象序列化实现深拷贝&#xff08;推荐&#xff09;3.2.2.重写 clone() 方法来实现深拷贝 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;原型模式 (Prototype Pattern) 是一种创建型设计模式&#xff0c;是通过…

DNS协议详解

DNS协议详解 DNS协议介绍DNS解析过程DNS查询的方式递归查询迭代查询区别 DNS协议介绍 DNS 协议是一个应用层协议&#xff0c;它建立在 UDP 或 TCP 协议之上&#xff0c;默认使用 53 号端口。该协议的功能就是将人类可读的域名 (如&#xff0c;www.qq.com) 转换为机器可读的 IP…