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 相关文章推荐
javascript 面向对象思想 附源码
Jul 07 Javascript
javascript控制swfObject应用介绍
Nov 29 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
js判断横竖屏及禁止浏览器滑动条示例
Apr 29 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
JQuery遍历DOM节点的方法
Jun 11 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 Javascript
JS实现含有中文字符串的友好截取功能分析
Mar 13 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 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
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PHP类的反射用法实例
2014/11/03 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
PHP多维数组排序array详解
2017/11/21 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
jquery 事件执行检测代码
2009/12/09 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
基于Python log 的正确打开方式
2018/04/28 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
anaconda如何查看并管理python环境
2019/07/05 Python
基于python实现把图片转换成素描
2019/11/13 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
电子商务专员岗位职责
2013/12/11 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
爱国演讲稿500字
2014/05/04 职场文书
关于环保的活动方案
2014/08/25 职场文书
论文致谢词范文
2015/05/14 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers