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 相关文章推荐
JS连接SQL数据库与ACCESS数据库的方法实例
Nov 21 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
Oct 17 Javascript
Jquery网页内滑动缓冲导航的实现代码
Apr 05 Javascript
在JavaScript中调用Java类和接口的方法
Sep 07 Javascript
利用vue实现模态框组件
Dec 19 Javascript
vue.js的安装方法
May 12 Javascript
php 修改密码实现代码
May 24 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
详解vue.js移动端配置flexible.js及注意事项
Apr 10 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
JavaScript实现网页tab栏效果制作
Nov 20 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
php 面向对象的一个例子
2011/04/12 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
php跨服务器访问方法小结
2015/05/12 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP钩子实现方法解析
2019/05/21 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
js调用图片隐藏&amp;显示实现代码
2013/09/13 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
Javascript的比较汇总
2016/07/25 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
在Python的Django框架中加载模版的方法
2015/07/16 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
python图像处理入门(一)
2019/04/04 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
初级Java程序员面试题
2016/03/03 面试题
思想品德自我鉴定
2013/10/12 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年管理工作总结
2014/11/22 职场文书
学校通报表扬范文
2015/05/04 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书