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" @mouseenter="mouseenterEvent" @mouseleave="mouseleaveEvent">
<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
},
//滚动延迟(毫秒)
delay: {
type: Number,
default: 1000
},
//是否鼠标移入停止滚动
hoverStop: {
type: Boolean,
default: true
}
},
data(){
return {
timer: null,//定时器 mouseInBox: false,//鼠标是否在容器内
}
},
//这里不用update,而是用watch进行监听,是因为插槽的缘故,会导致update异常
watch: {
data(){
//等待渲染完毕
this.$nextTick(()=>{
//初始化滚动
this.initScroll()
})
}
},
mounted(){
//初始化滚动
this.initScroll()
},
beforeDestroy(){
//清除定时器
clearInterval(this.timer)
clearTimeout(this.timerDelay)
},
methods: {
//初始化滚动
initScroll(){
var box = this.$refs['table-scroll-wrap']
//计算滚动距离
var scrollDistance = box.scrollHeight - box.clientHeight
//回到顶部
box.scrollTo({
top: 0
})
//没产生滚动,不做处理
if(scrollDistance <= 0){
//事件抛出(空列表不抛出,防止数据冲突)
if(this.data.length > 0){
this.$emit('noScroll')
}
return
}
//如果开启了悬停,且鼠标处于悬停状态
if(this.hoverStop && this.mouseInBox){
return
}
//清除旧定时器
clearTimeout(this.timerDelay)
//延迟定时器
this.timerDelay = setTimeout(()=>{
//开始滚动
this.startScroll()
},this.delay) },
//开启滚动
startScroll(){
var box = this.$refs['table-scroll-wrap']
//计算滚动距离
var scrollDistance = box.scrollHeight - box.clientHeight
//当前滚动距离
var scrollTop = box.scrollTop
//已经到底,或者没有滚动距离,不执行
if(scrollTop >= scrollDistance || scrollDistance <= 0){
return
}
//清除旧定时器
clearInterval(this.timer)
//开启定时器
this.timer = setInterval(()=>{
//进行滚动
if(scrollTop >= scrollDistance){
//清除定时器
clearInterval(this.timer)
//事件抛出
this.$emit('scrollToEnd')
}else{
//执行滚动
scrollTop += this.step
box.scrollTo({
top: scrollTop
})
}
},this.duration)
},
//终止滚动
stopScroll(){
//清除定时器
clearInterval(this.timer)
clearTimeout(this.timerDelay)
},
//鼠标移入
mouseenterEvent(){
this.mouseInBox = true
if(this.hoverStop){
//终止滚动
this.stopScroll()
}
},
//鼠标移出
mouseleaveEvent(){
this.mouseInBox = false
if(this.hoverStop){
//重新开启滚动
this.startScroll()
}
}
}
}
</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>

vue表格轮播插件的更多相关文章

  1. 后盾网lavarel视频项目---Vue项目使用vue-awesome-swiper轮播插件

    后盾网lavarel视频项目---Vue项目使用vue-awesome-swiper轮播插件 一.总结 一句话总结: vue中的插件的使用和js插件的使用一样的简单,只是vue插件的引入过程有些不同 ...

  2. Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示

    用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件 ...

  3. 原生JS实现"旋转木马"效果的图片轮播插件

    一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...

  4. 多预览小图焦点轮播插件lrtk

    多预览小图焦点轮播插件lrtk // JavaScript Document $(document).ready(function(){ //$('#select_btn li:first').css ...

  5. 推荐:图片轮播插件Nivo Slider

          因为项目需要一款切换样式多一些的轮播插件,不经意找到了NivoSlider,非常好用,比bootstrap要好用,而且样式丰富.值得注意的是,这款插件是在MIT协议下免费的.        ...

  6. PgwSlideshow-基于Jquery的图片轮播插件

    0 PgwSlideshow简介 PgwSlideshow是一款基于Jquery的图片轮播插件,基本布局分为上下结构,上方为大图轮播区域,用户可自定义图片轮播切换的间隔时间,也可以通过单击左右方向按键 ...

  7. 12款经典的白富美型—jquery图片轮播插件—前端开发必备

    图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美 ...

  8. Nivo Slider - 世界上最棒的 jQuery 图片轮播插件

    Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...

  9. js-自制轮播插件!

    刚接触轮播的时候,感觉这种东西好高端,后来学习了jquery后,发现原来挺简单的,而且实现轮播也有很多形式,我用jquery自制了一个轮播插件,其实我这个说是插件,好像其实就是一个高度抽象的函数而已. ...

  10. Bootstrap 轮播插件

    一.轮播 //基本实例. <div id="myCarousel" class="carousel slide"> <ol class=&qu ...

随机推荐

  1. ASP.NET Core – Byte, Stream, Directory, File 基础

    前言 以前的文章: Stream 基础和常用 和 IO 常用. 这篇主要是做一个整理, 方便要用的时候 warm up. 之前有讲过 Bit, Byte 的基本概念: Bit, Byte, ASCII ...

  2. HTTP——简介

    HTTP   

  3. Linux下挂载SD卡,以及容易犯的误区

    1.插入SD卡 如果系统能够识别SD卡,则会打印一些信息: 2.查看系统给SD卡分配的设备名 命令如下: fdisk -l 说明:通常是根据SD卡的存储容量来确定的. 比如下面的信息: 3.挂载SD卡 ...

  4. 音视频入门-7-ffmpeg小实验-v4l2 ubuntu 获取摄像头图像并进行格式转换

    1. Linux内我们使用V4L2框架获取摄像头数据,由于摄像头的不同,摄像头所输出的数据格式各有不同.    考虑到YUV420P 的格式使用最广泛,我们最终将摄像头数据转为该格式. pic_dat ...

  5. 向量法求 T3 这个若智 r^2

    int sqr_vector_dis(node a){ return a.x*a.x+a.y*a.y; } frac vector_multi(node a,node b){ return frac( ...

  6. spring 拦截器实现token校验登录

    pom文件 <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</art ...

  7. CentOS7 控制台上安装运行 vmware workstation 备忘录

    目标平台 CentOS 7.5.1804 无桌面,要跑个 Ubuntu.vmx 1.安装依赖库 yum -y install perl gcc kernel-devel libX11 libXiner ...

  8. js模拟二维数组求和

    JavaScri实际上没有二维数组的概念,但是由于js变量是松散的,所以能设置数组元素为数组来模拟二维数组,以此类推,可以模拟多维数组. /* 需求:模拟了3 * 3数组求右上三角元素之和1 + 3 ...

  9. 云原生周刊:Kubernetes v1.30 发布 | 2024.4.22

    开源项目推荐 pv-migrate pv-migrate 是一个 CLI 工具/kubectl 插件,可轻松将一个 Kubernetes 的内容迁移 PersistentVolumeClaim 到另一 ...

  10. curl命令详解【转载】

    本文转载自curl 的用法指南-阮一峰 简介 curl 是常用的命令行工具,用来请求 Web 服务器.它的名字就是客户端(client)的 URL 工具的意思. 它的功能非常强大,命令行参数多达几十种 ...