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 相关文章推荐
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
jquery 鼠标滑动显示详情应用示例
Jan 24 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
Jan 26 Javascript
js控制网页背景音乐播放与停止的方法
Feb 06 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
在for循环中length值是否需要缓存
Jul 27 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
Vue中fragment.js使用方法详解
Mar 09 Javascript
vue实现树形菜单效果
Mar 19 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
Oct 27 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
深入php define()函数以及defined()函数的用法详解
2013/06/05 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
Javascript 强制类型转换函数
2009/05/17 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
python中zip和unzip数据的方法
2015/05/27 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
python变量不能以数字打头详解
2016/07/06 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
毕业生求职自荐信怎么写
2014/01/08 职场文书
报关报检委托书
2014/04/08 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
运动会演讲稿300字
2014/08/25 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书