vue表格轮播插件

news/2024/10/12 16:28:49

1.前言

  • 需求:制作大屏看板时,经常要展示表格数据,通常一页时放不下的,表格需要自动滚动,并维持表头固定
  • 为何自己封装:网上的滚动组件由2类,一种传入json数据进行滚动,优点是可以做到表头固定,但是样式不方便自定义(DataV),一直是常规滚动插件,不支持表头固定

2.实现思路及说明

  • 使用插槽接收表格内容,便于用户自定义表格样式
  • 渲染完毕后计算可滚动距离,使用定时器进行滚动,滚动到底则抛出事件
  • 组件高度默认100%,需要自行给父容器设定高度
  • 表头固定使用position: sticky进行实现,其实就是一个吸顶效果,需要给表头一个背景色,防止滚动时表体内容内容透过来

3.使用方法

  • 引入该插件,将目标表格用此组件标签进行包裹
<zy-table-scroll @scrollToEnd="scrollToEnd" @noScroll="noScroll" :data="tableData"><table><table>
</zy-table-scroll>
  • 参数说明
参数 说明
data 表格数据,数组格式,用于监听数据变化,重置滚动
duration 每次滚动距离(px),默认10
step 滚动时间间隔(毫秒),默认0.2
@scrollToEnd 滚动到底事件
@noScroll 当数据不为空,但是没有产生滚动条时触发

4.代码

<template><div class="table-scroll-wrap" ref="table-scroll-wrap"><slot></slot></div>
</template><script>
export default{props: {data: {type:Array,default: function(){return []}},//滚动间隔(毫秒)duration: {type: Number,default: 10},//每次滚动距离(px)step: {type: Number,default: 0.2}},data(){return {timer: null,//定时器}},//这里不用update,而是用watch进行监听,是因为插槽的缘故,会导致update异常watch: {data(){//等待渲染完毕this.$nextTick(()=>{//初始化滚动this.initScroll()})}},mounted(){//初始化滚动this.initScroll()},beforeDestroy(){//清除定时器clearInterval(this.timer)},methods: {//初始化滚动initScroll(){var box = this.$refs['table-scroll-wrap']//计算滚动距离var scrollDistance = box.scrollHeight - box.clientHeight//没产生滚动,不做处理if(scrollDistance <= 0){//事件抛出(空列表不抛出,防止数据冲突)if(this.data.length > 0){this.$emit('noScroll')}return}//回到顶部box.scrollTo({top: 0})//当前滚动距离var scrollTop = box.scrollTop//开启定时器执行滚动scrollToclearInterval(this.timer)this.timer = setInterval(()=>{//进行滚动if(scrollTop >= scrollDistance){//清除定时器clearInterval(this.timer)//事件抛出this.$emit('scrollToEnd')}else{//执行滚动scrollTop += this.stepbox.scrollTo({top: scrollTop})}},this.duration)}}
}
</script><style scoped lang="scss">
.table-scroll-wrap{height: 100%;overflow: auto;&::-webkit-scrollbar {width: 0;}table{tr{&:first-child{position: sticky;top:0;}}}
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Winform MessageBox消息弹窗如何实现自动关闭

使用了Windows API函数FindWindow和SendMessage来查找消息框的窗口句柄并发送关闭消息 实现方法public class AutoClosingMessageBox{System.Threading.Timer _timeoutTimer;string _caption;AutoClosingMessageBox(string text, string caption, int timeout){_caption = capt…

Express的使用笔记3 中间件

日志中间件 // 挂载会每个接口都执行这段代码 app.use((req,res,next)=>{console.log(req.method,req.url,Date.now())next() //下一个中间件 })2.中间件的顺序很重要 如果有一个普通接口写在上面代码之前,那么就不会进入上面的函数中 但是如果在接口中第二个回调函数的参数…

2024 Navicat Premium 16+17安装教程(附激活方法)

Navicat Premium,作为一款功能全面的集成数据库管理工具,无缝支持多样化的数据库类型,为用户带来前所未有的高效与便捷管理体验。它不仅涵盖了连接管理、数据导入导出、同步迁移、备份恢复等核心功能,确保用户能够游刃有余地应对各类数据库管理挑战,还进一步拓展了数据库对…

gost socks5代理

购买云主机开放所有tcp端口 配置云主机 https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el8/x86_64/ 选择清华镜像源[root@iZbp141m9g3iwgwsmh7pvzZ yum.repos.d]# cat >> /etc/yum.repos.d/elrepo.repo << q [elrepo] name=elrepo gpgcheck=0 baseurl=https…

2024-2025-1 20241403 《计算机基础与程序设计》第三周学习总结

学期(2024-2025-1) 学号(20241403) 《计算机基础与程序设计》第三周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第三周作业)这个作业的…

基于FIFO使用UART实现FPGA板与PC通信

基于FIFO使用UART实现FPGA板与PC通信 1. UART 简介 UART(通用异步收发传输器)是一种常用的串行通信协议,广泛用于FPGA与外部设备(如PC、传感器等)之间的通信。UART 通信的核心是将并行数据转换为串行数据传输,然后在接收端再将串行数据恢复为并行数据。 UART协议特点:异…

软件构造,生成算式采用CSV、XML、JSON三种形式进行存储并读取。

编写代码完成将生成的算式及习题长期保存下来,采用CSV、XML、JSON三种形式进行存储并读取。提交相关代码及运行截图。import random import csv import json import xml.etree.ElementTree as ET from xml.dom import minidom# 生成随机算式数据 def generate_exercises(count…