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. 合合信息通过ISO/IEC国际标准双认证,为全球用户提供高合规标准AI服务

    互联网.AI等技术的全球普及为人们提供便捷服务的同时,也带来了信息安全领域的诸多挑战.保护用户隐私及数据安全,是科技企业规范.健康发展的重心.近期,上海合合信息科技股份有限公司(简称"合合信 ...

  2. CSS & JS Effect – Simulation Position Sticky (用 JavaScript 实现 position sticky)

    前言 在 CSS – Position 我有提到过, 原生的 sticky 有一些 limitation. 不是每次都闪的掉. 这篇主要是通过 JS 来模拟它, 突破那些限制. Google Ads ...

  3. Windows系统之“关闭windows 文件夹分组”

    不知道怎么就按出来了 文件夹分组 ,也不知道怎么关闭,别扭了好久 解决办法: 右键点击文件夹空白处,选择 "分组依据" --> 然后选择 "无"

  4. Linux-USB驱动笔记--设备控制器(UDC)驱动

    1.前言 在Linux-USB驱动笔记(四)–USB整体框架中有説到设备侧的设备控制器(UDC),下面我们来具体看一下. 2.设备控制器(UDC) USB设备控制器(UDC)驱动指的是作为其他USB主 ...

  5. Guava中的Joiner和Splitter

    目录 Guava 介绍 Joiner list转string map转string 处理嵌套集合 处理null值 Splitter string转list string转map 多个拆分符 输出 代码 ...

  6. Python之py9-录音自动下载

    #!/usr/bin/env python # -*- coding:utf-8 -*- import os import re import pandas as pd import numpy as ...

  7. spring cloud openfeign源码分析

    大体流程鱼骨图 1.读取配置 启动类上添加注解@EnableFeignClients,工程启动后会自动读取注解上的配置 1 @Retention(RetentionPolicy.RUNTIME) 2 ...

  8. TiDB集群安装维护

    TIDB安装操作文档-https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup 1.环境准备(每台) 1-查看系 ...

  9. KubeSphere DevOps 流水线入门指南

    作者:赵海亮,浙江大学计算机专业四年级在读博士生,研究方向为云计算.边缘计算.分布式系统等. 虽然 KubeSphere 能够将我们从 yaml 文件的编写中解放出来,但是项目上云仍然十分繁琐. 此外 ...

  10. Mongo oplog理解

    转载请注明出处: oplog(操作日志)是MongoDB中用于记录所有写操作的日志.它是一个特殊的集合,存储在副本集的主节点中.oplog用于确保副本集中的副节点与主节点的数据保持一致.当主节点执行写 ...