vue表格轮播插件
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表格轮播插件的更多相关文章
- 后盾网lavarel视频项目---Vue项目使用vue-awesome-swiper轮播插件
后盾网lavarel视频项目---Vue项目使用vue-awesome-swiper轮播插件 一.总结 一句话总结: vue中的插件的使用和js插件的使用一样的简单,只是vue插件的引入过程有些不同 ...
- Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示
用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件 ...
- 原生JS实现"旋转木马"效果的图片轮播插件
一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...
- 多预览小图焦点轮播插件lrtk
多预览小图焦点轮播插件lrtk // JavaScript Document $(document).ready(function(){ //$('#select_btn li:first').css ...
- 推荐:图片轮播插件Nivo Slider
因为项目需要一款切换样式多一些的轮播插件,不经意找到了NivoSlider,非常好用,比bootstrap要好用,而且样式丰富.值得注意的是,这款插件是在MIT协议下免费的. ...
- PgwSlideshow-基于Jquery的图片轮播插件
0 PgwSlideshow简介 PgwSlideshow是一款基于Jquery的图片轮播插件,基本布局分为上下结构,上方为大图轮播区域,用户可自定义图片轮播切换的间隔时间,也可以通过单击左右方向按键 ...
- 12款经典的白富美型—jquery图片轮播插件—前端开发必备
图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美 ...
- Nivo Slider - 世界上最棒的 jQuery 图片轮播插件
Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...
- js-自制轮播插件!
刚接触轮播的时候,感觉这种东西好高端,后来学习了jquery后,发现原来挺简单的,而且实现轮播也有很多形式,我用jquery自制了一个轮播插件,其实我这个说是插件,好像其实就是一个高度抽象的函数而已. ...
- Bootstrap 轮播插件
一.轮播 //基本实例. <div id="myCarousel" class="carousel slide"> <ol class=&qu ...
随机推荐
- Angular 学习笔记 language service
尝试 v10 rc 的时候, 突然 language service 不 work 了. ctrl + shift + p -> Show logs... 这样可以检查和 report issu ...
- Azure – Azure Active Directory
前言 虽然它好像是快过时了, 但目前还得用到. 先不研究新的先. Azure 的 service 如果要通过 API 调用的话, 就需要 Azure Active Directory (Azure A ...
- SQL Server – History Table (Audit/Archive Table)
前言 续上一篇的 Soft Delete 后, 我们继续来看看 History Table (Audit/Archive Table). Archive Table 市场上有了这样叫, 但我觉得它比较 ...
- EditPlus各个版本的注册码,可用
原文链接:https://www.cnblogs.com/shihaiming/p/6422441.html 工具: editplus注册码生成链接: http://www.jb51.net/tool ...
- find基础命令与提权教程
关于我 博客主页:https://mp.weixin.qq.com/mp/homepage?__biz=Mzg2Nzk0NjA4Mg==&hid=2&sn=54cc29945318b7 ...
- Jmeter、postman、python 三大主流技术如何操作数据库?
1.前言 只要是做测试工作的,必然会接触到数据库,数据库在工作中的主要应用场景包括但不限于以下: 功能测试中,涉及数据展示功能,需查库校验数据正确及完整性:例如商品搜索功能 自动化测试或性能测试中,某 ...
- 精彩回顾 | Flutter Engage China 视频合集
在上周的 Flutter Engage China 活动中,Google Flutter 团队和来自国内的开发者们共同探讨和交流 Flutter 的最新更新.实践和未来的发展.虽然只能通过线上交流,但 ...
- USB2.0 的LPM和USB3.0的LPM区别
USB 2.0 和 USB 3.0 都支持低功耗管理机制(LPM,Link Power Management),但两者的实现方式和目标不同.以下是 USB 2.0 的 LPM 和 USB 3.0 的 ...
- 墨天轮访谈 | 叶金荣:GreatSQL开源社区——做中国广受欢迎的开源数据库
分享嘉宾:叶金荣 万里数据库开源生态负责人 整理:墨天轮社区 导读 大家好,我是来自万里数据库的叶金荣,GreatSQL开源社区的愿景是做中国广受欢迎的开源数据库,这也是我今天分享的主题. Great ...
- threejs - js库 gui 的使用 调试开发3D效果
// 导入 threejs import * as THREE from "three"; import { OrbitControls } from "three/ex ...