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读取本地excel文档数据的代码
Nov 11 Javascript
JQuery动态给table添加、删除行 改进版
Jan 19 Javascript
原生js结合html5制作简易的双色子游戏
Mar 30 Javascript
JS实现来回出现文字的状态栏特效代码
Oct 31 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
微信小程序 同步请求授权的详解
Aug 04 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
Element输入框带历史查询记录的实现示例
Jan 15 Javascript
小程序绑定用户方案优化小结
May 15 Javascript
在vue项目中使用sass语法问题
Jul 18 Javascript
Vue前端项目部署IIS的实现
Jan 06 Javascript
使用JS实现简易计算器
Jun 14 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二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
python把一个字符串切开的实例方法
2020/09/27 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
考博专家推荐信模板
2013/12/02 职场文书
高中毕业自我鉴定
2013/12/13 职场文书
双创工作实施方案
2014/03/26 职场文书
3的组成教学反思
2014/04/30 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
mysql知识点整理
2021/04/05 MySQL