vue elementUI table表格数据 滚动懒加载的实现方法


Posted in Javascript onApril 04, 2019

在项目中遇到了一个性能问题

vue+elementUI table表格展示数据,当数据很多的时候,不能一页显示完,同时一次请求数据量太大,会增加网页渲染的时间,影响体验,

这个时候常常有两种方法处理,

1、分页,如下

 vue elementUI table表格数据 滚动懒加载的实现方法

2、如果我不想分页,又想在一页显示全部数据呢?这个时候其实就可以用数据懒加载了

如下一开始表格只显示31行数据

vue elementUI table表格数据 滚动懒加载的实现方法

当将滚动条拉到低的时候,就会再加载31条数据,如果剩下的数据不足31,那就加载剩下的

 vue elementUI table表格数据 滚动懒加载的实现方法

根据项目需求,这需要一页可以看到全部数据,所以我选择了第二中方式

那么第二种方式要怎么去实现呢?

在了解它的原理前,你需要分清楚三个属性:

scrollHeight:指元素的总高度,包含滚动条中的内容。只读属性。不带px单位。就是下图中,54条数据的高度,但是因为有滚动条,所以屏幕看不到这么高

scrollTop:当元素出现滚动条时,向下拖动滚动条,内容向上滚动的距离。可读可写属性。不带px单位。如果该元素没有滚动条,则scrollTop的值为0,该值只能是正值。就是下图中红色框的高度

clientHeight:元素客户区的大小,指的是元素内容及其边框所占据的空间大小,实际上就是可视区域的大小。就是下图红色箭头的高度

 vue elementUI table表格数据 滚动懒加载的实现方法

那如何判断滚动条滚到底部了呢?

scrollHeight-scrollTop-clientHeight=0,这个时候可以就是滚动条滚到底部的时候了。

在第一次请求数据的时候,先设置一个变量来记录请求次数(其实后台也是做分页的处理)

this.currentPage = 1,
$this = this;
this.$axios.fun().then(res=>{
   $this.totalPage = res.totalPage; //这里需要知道总页数
   
   $this.tableData = res.data;//表格数据
})

监听表格dom对象的滚动事件

let dom = document.querySelector(targetDom);
  dom.addEventListener("scroll", function() {
    const scrollDistance =dom.scrollHeight - dom.scrollTop - dom.clientHeight;
    if(scrollDistance <=0){//等于0证明已经到底,可以请求接口
      if($this.currentPage < $this.totalPage){//当前页数小于总页数就请求
        $this.currentPage++;//当前页数自增
        
        //请求接口的代码
        $this.$axios.fun().then(res=>{
        
          $this.tableData = $this.tableData.concat(res.data)//将请求回来的数据和当前展示的数据合并在一起
        })
        
      }
    }
  })

好了,表格滚动下拉懒加载数据就是这样实现的,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
juqery 学习之四 筛选查找
Nov 30 Javascript
javascript匿名函数应用示例介绍
Mar 07 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
基于javascript实现按圆形排列DIV元素(三)
Dec 02 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
使用原生的javascript来实现轮播图
Feb 24 Javascript
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
animate.css在vue项目中的使用教程
Aug 05 Javascript
vue配置nprogress实现页面顶部进度条
Sep 21 Javascript
vue2.0 解决抽取公用js的问题
Jul 31 Javascript
vue使用canvas实现移动端手写签名
Sep 22 Javascript
js 计算图片内点个数的示例代码
Apr 04 #Javascript
在node中使用jwt签发与验证token的方法
Apr 03 #Javascript
全面了解JavaScript的作用域链
Apr 03 #Javascript
从理论角度讨论JavaScript闭包
Apr 03 #Javascript
Node.js+Express+Mysql 实现增删改查
Apr 03 #Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 #Javascript
js前端面试之同步与异步问题详解
Apr 03 #Javascript
You might like
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
python实现k-means聚类算法
2018/02/23 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
Python中的heapq模块源码详析
2019/01/08 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
结构工程研究生求职信
2013/10/13 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
家长会主持词开场白
2014/03/18 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
会议通知范文
2015/04/15 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python