Vue实现一个无限加载列表功能


Posted in Javascript onNovember 13, 2018

一个需要判断的地方就是加载中再次触发滚动的时候,不要获取数据。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>列表无限加载</title>
 <style>
  * {
   margin: 0;
   padding: 0;
  }
  li {
   height: 50px;
   border-bottom: 1px solid #c7c7c7;
   list-style: none;
   line-height: 50px;
   padding-left: 30px;
  }
 </style>
</head>
<body>
 <div id="unlimitedList">
  <ul>
   <li v-for="item in list">{{ item }}</li>
   <li :style="{display: loading ? 'initial' : 'none'}">Loading......</div>
  </ul>
 </div>
 <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
 <script>
  function fetch(from, size = 20) { // 模拟后台获取数据
   console.log('获取数据 传入: ', { from, size });
   let data = [];
   let total = 98;
   size = Math.min(size, total - from + 1);
   for (let i = 0; i < size; i++) {
    data.push(`列表项${from + i}`);
   }
   let ret = { data, total };
   return new Promise(function (resolve, reject) {
    setTimeout(() => {
     console.log('获取数据 返回: ', ret);
     resolve(ret);
    }, 500);
   })
  }
  new Vue({
   el: '#unlimitedList',
   data: {
    list: [],
    loading: true,  // 数据加载中
    allLoaded: false // 数据已经全部加载
   },
   methods: {
    getData() {
     this.loading = true; // 显示加载中的标识
     fetch(this.list.length + 1).then(res => {
      this.list.splice(this.list.length, 0, ...res.data); // 将新获取到的数据连接到 this.list (vue 能检测到 splice() 函数
      this.loading = false; // 加载结束 取消加载中显示
      if (this.list.length === res.total) {
       this.allLoaded = true;
      }
     })
    },
    onScroll(e) {
     if (this.loading || this.allLoaded) return;
     let top = document.documentElement.scrollTop || document.body.scrollTop; // 滚动条在Y轴上的滚动距离
     let vh = document.compatMode == 'CSS1Compat' ? document.documentElement.clientHeight : document.body.clientHeight; // 浏览器视口的高度
     let height = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); // 文档的总高度
     if (top + vh >= height) { // 滚动到底部
      this.getData(); // 如果已经滚到底了 获取数据
     }
    }
   },
   created() {
    this.getData();
    window.addEventListener('scroll', this.onScroll);
   },
   destroyed () {
    window.removeEventListener('scroll', this.onScroll);
   }
  })
 </script>
</body>
</html>

总结

以上所述是小编给大家介绍的Vue实现一个无限加载列表功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
获取Javscript执行函数名称的方法
Dec 22 Javascript
javascript函数定义的几种区别小结
Jan 06 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
基于jquery实现简单的分页控件
Mar 17 Javascript
总结在前端排序中遇到的问题
Jul 19 Javascript
AngularJs  Understanding Angular Templates
Sep 02 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
详解用vue-cli来搭建vue项目和webpack
Apr 20 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
May 01 Javascript
layui table 表格模板按钮的实例代码
Sep 21 Javascript
vue中element 的upload组件发送请求给后端操作
Sep 07 Javascript
Javascript文本框脚本实现方法解析
Oct 30 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 #Javascript
vue中slot(插槽)的介绍与使用
Nov 12 #Javascript
vuex的module模块用法示例
Nov 12 #Javascript
React手稿之 React-Saga的详解
Nov 12 #Javascript
基于游标的分页接口实现代码示例
Nov 12 #Javascript
React Hooks的深入理解与使用
Nov 12 #Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 #Javascript
You might like
IStream与TStream之间的相互转换
2008/08/01 PHP
微信支付开发交易通知实例
2016/07/12 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
容易被忽略的JS脚本特性
2011/09/13 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
Python获取当前时间的方法
2014/01/14 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
材料会计岗位职责
2014/03/06 职场文书
优秀广告词大全
2014/03/19 职场文书
大型营销活动计划书
2014/04/28 职场文书
广播节目策划方案
2014/05/23 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
孙振耀退休感言
2015/08/01 职场文书
我的中国梦主题班会
2015/08/14 职场文书
golang import自定义包方式
2021/04/29 Golang