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 相关文章推荐
如何判断元素是否为HTMLElement元素
Dec 06 Javascript
JS中Location使用详解
May 12 Javascript
Bootstrap选项卡与Masonry插件的完美结合
Jul 06 Javascript
详解浏览器渲染页面过程
Feb 09 Javascript
vue-router 学习快速入门
Mar 01 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
关于Node.js的events.EventEmitter用法介绍
Apr 01 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
JS实现前端路由功能示例【原生路由】
May 29 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+ACCESS 文章管理程序代码
2010/06/21 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
详解vue-cli3使用
2018/08/14 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python中的类与对象之描述符详解
2015/03/27 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
python如何控制进程或者线程的个数
2020/10/16 Python
linux面试题参考答案(4)
2014/09/21 面试题
人力资源管理专业学生自我评价
2013/11/20 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
学校师德承诺书
2014/05/23 职场文书
土建工程师岗位职责
2014/06/10 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
SQL基础的查询语句
2021/11/11 MySQL