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 相关文章推荐
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
js 实现浏览历史记录示例
Apr 20 Javascript
jquery比较简洁的软键盘特效实现方法
Mar 19 Javascript
jquery中$each()方法的使用指南
Apr 30 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
jquery trigger函数执行两次的解决方法
Feb 29 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
Apr 27 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 Javascript
微信小程序实现商品属性联动选择
Feb 15 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数据类型的总结分析
2013/06/13 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
js实现简易ATM功能
2020/10/27 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python处理文本换行符实例代码
2018/02/03 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
全球性的在线购物网站:Zapals
2017/03/22 全球购物
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
优秀交警事迹材料
2014/01/26 职场文书
文科生自我鉴定
2014/02/15 职场文书
会计学专业自荐信
2014/06/25 职场文书
个人党性分析材料
2014/12/19 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
python实现Thrift服务端的方法
2021/04/20 Python