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 相关文章推荐
jQuery语法总结和注意事项小结
Nov 11 Javascript
javascript对select标签的控制(option选项/select)
Jan 31 Javascript
js实现表格字段排序
Feb 19 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
JavaScript实现打开链接页面的方式汇总
Jun 02 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
DropDownList控件绑定数据源的三种方法
Dec 24 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
vue中使用element-ui进行表单验证的实例代码
Jun 22 Javascript
js变量声明var使用与不使用的区别详解
Jan 21 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 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
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
php 调用远程url的六种方法小结
2009/11/02 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
JS原型链怎么理解
2016/06/27 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
Python随机生成带特殊字符的密码
2016/03/02 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python中如何设置代码自动提示
2020/07/15 Python
Python使用Pygame绘制时钟
2020/11/29 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
员工培训心得体会
2013/12/30 职场文书
建议书怎么写
2014/03/12 职场文书
演讲稿的写法
2014/05/19 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
解放思想演讲稿
2014/09/11 职场文书
应聘教师自荐信
2015/03/26 职场文书
Python中requests库的用法详解
2022/06/05 Python