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 相关文章推荐
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
Javascript获取当前日期的农历日期代码
Oct 08 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
jQuery.ajax向后台传递数组问题的解决方法
May 12 jQuery
Javascript中的async awai的用法
May 17 Javascript
JavaScript闭包的简单应用
Sep 01 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
Jan 15 Javascript
layui 给数据表格加序号的方法
Aug 20 Javascript
JS中判断字符串存在和非空的方法
Sep 12 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
Jun 10 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 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
轻松修复Discuz!数据库
2008/05/03 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
深入分析js中的constructor和prototype
2012/04/07 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
python实现的系统实用log类实例
2015/06/30 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
python 读取、写入txt文件的示例
2020/09/27 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
班组长安全生产职责
2013/12/16 职场文书
管理专员自荐信
2014/01/26 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
吴仁宝观后感
2015/06/09 职场文书
小学英语教学反思范文
2016/02/15 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python