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. 【论文解读】transformer小目标检测综述

    一.简要介绍       Transformer在计算机视觉领域迅速普及,特别是在目标识别和检测领域.在检查最先进的目标检测方法的结果时,我们注意到,在几乎每个视频或图像数据集中,transforme ...

  2. CCIA数安委等组织发布PIA星级标识名单,合合信息再次通过数据安全领域权威评估

    CCIA数安委等组织发布PIA星级标识名单,合合信息再次通过数据安全领域权威评估   近期,"中国网络安全产业联盟(CCIA)数据安全工作委员会"."数据安全共同体计划( ...

  3. Vue3——环境变量的配置

    vue3环境变量的配置 开发环境(development) 测试环境(testing) 生产环境(production) 项目根目录分别添加 开发.生产和测试环境的文件! .env.developme ...

  4. 关于 B 先生

    B 先生是不是要疯了,他今天说的都是他妈什么几把

  5. .net 调用 nsfwjs 进行视频鉴别

    1. npm 安装 nsfwjs npm install express --save npm install multer --save npm install jpeg-js --save npm ...

  6. 00 你想要学习的 AI+Python,捷径在这里

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  7. Kubernetes 对接 GlusterFS 磁盘扩容实战

    前言 知识点 定级:入门级 使用 Heketi Topology 扩容磁盘 使用 Heketi CLI 扩容磁盘 实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同) 主机名 IP CP ...

  8. KubeSphere 3.3.2 版本正式发布!

    距离上一个版本 v3.3.1 发布,已经过了 3 个多月,今天我们很高兴宣布 KubeSphere v3.3.2 正式发布! 此版本由 68 位贡献者参与代码提交,感谢各位贡献者对 KubeSpher ...

  9. Nuxt.js 应用中的 app:templates 事件钩子详解

    title: Nuxt.js 应用中的 app:templates 事件钩子详解 date: 2024/10/18 updated: 2024/10/18 author: cmdragon excer ...

  10. 《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

    <这是全网最硬核redis总结,谁赞成,谁反对?>六万字大合集 我啥都不想说了,本文章来自 "本来可以靠脸吃饭的,非得靠技术的一位小姐姐" 名字叫:"兔兔Ra ...