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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
jQuery实现的立体文字渐变效果
May 17 Javascript
javascript继承机制实例详解
Nov 20 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
Mar 04 Javascript
javascript实现数组去重的多种方法
Mar 14 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
jQuery实现右侧抽屉式在线客服功能
Dec 25 jQuery
小程序实现带年月选取效果的日历
Jun 27 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
Nov 09 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
香妃
2021/03/03 冲泡冲煮
PHP脚本的10个技巧(2)
2006/10/09 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
JavaScript 特殊字符
2007/04/05 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
JS实现多物体运动的方法详解
2018/01/23 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
python字典改变value值方法总结
2019/06/21 Python
怎样让char类型的东西转换成int类型
2013/12/09 面试题
英文自我鉴定
2013/12/10 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
施工员岗位职责范本
2015/04/11 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
保姆聘用合同
2015/09/21 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书