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 相关文章推荐
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 Javascript
js 加载时自动调整图片大小
May 28 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
jquery解析xml字符串简单示例
Apr 11 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
基于Jquery代码实现手风琴菜单
Nov 19 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
Jul 28 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
Sep 20 jQuery
微信小程序日历效果
Dec 29 Javascript
vue图片上传本地预览组件使用详解
Feb 20 Javascript
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
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的类 功能齐全的发送邮件类
2006/10/09 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php 删除cookie方法详解
2014/12/01 PHP
php截取字符串函数分享
2015/02/02 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
通过实例学习React中事件节流防抖
2019/06/17 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
Python 错误和异常代码详解
2018/01/29 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
应用心理学个人求职信范文
2013/12/11 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
行政人事岗位职责
2014/03/17 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
董事长年会致辞
2015/07/29 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python