vue实现下拉加载其实没那么复杂


Posted in Javascript onAugust 13, 2019

前言

之前缺乏移动端的经验。一直不知道上拉加载,下拉刷新是怎么实现的。现在正好有个产品有这样一个需求。想了一会没有思路。就去找插件。啥vue-infinite-scroll,vue-virtual-scroll-list。啊呀,牛!无限滚动,十万条数据渲染。

经过我一大圈的折腾。还是默默的卸载了插件。我只是需要实现一个下拉加载,不需要其他这么多的功能。看了看其他人的源码,直接撸了起来,实现一个List组件。

效果展示

vue实现下拉加载其实没那么复杂

MList.vue

<template>
 <div class="list-wrap">
  <div class="content" ref="list" @scroll="onScroll">
   <slot></slot>
  </div>
  <div class="loading" v-show="loading">正在加载数据......</div>
 </div>
</template>
<script lang='ts'>
import { Component, Vue, Watch, Prop } from "vue-property-decorator";
@Component({
 components: {}
})
export default class extends Vue {
 @Prop()
 private loading!: boolean;
 private onScroll() {
  const obj: any = this.$refs.list;
  // clientHeight 视口高度 scrollTop 滚动条离顶部的高度 scrollHeight 列表内容的高度
  if (obj.clientHeight + obj.scrollTop === obj.scrollHeight) {
   this.$emit("toBottom");
  }
 }
}
</script>
<style scoped lang="scss">
.list-wrap {
 width: 100%;
 height: 100%;
 position: relative;
 .content {
  width: 100%;
  height: 100%;
  overflow-y: scroll;
 }
 .loading {
  position: absolute;
  bottom: -20px;
  width: 100%;
  height: 20px;
  color: #ffffff;
 }
}
::-webkit-scrollbar { // 去除滚动条边框
 width: 0 !important;
}
::-webkit-scrollbar {
 width: 0 !important;
 height: 0;
}
</style>

使用组件

<div class="body">
   <m-list @toBottom="fetchNewData()" :loading="loading">
    <code-info class="item" v-for="(item,index) in dataList" :key="index"></code-info>
   </m-list>
</div>

 private dataList: any[] = [1, 2, 3, 4, 5, 6, 7, 8];
 private loading: boolean = false;
 private fetchNewData() {
  this.loading = true;
  setTimeout(() => {
   this.dataList.push(1, 2, 3);
   const ref: any = this.$refs.vueLoad;
   this.loading = false;
  }, 1000);
 }

这里需要注意的是m-list的父容器一定要固定高度,本例为body。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js调用flash的效果代码
Apr 26 Javascript
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
node.js中的fs.chmodSync方法使用说明
Dec 18 Javascript
js一维数组、多维数组和对象的混合使用方法
Apr 03 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
May 05 Javascript
js微信分享API
Oct 11 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
js最简单的双向绑定实例讲解
Jan 02 Javascript
javascript高仿热血传奇游戏实现代码
Feb 22 Javascript
javascript中如何判断类型汇总
May 14 Javascript
vue实现导航菜单和编辑文本的示例代码
Jul 04 Javascript
详解Javascript实践中的命令模式
May 05 Javascript
vue中created和mounted的区别浅析
Aug 13 #Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 #Javascript
微信小程序使用npm包的方法步骤
Aug 13 #Javascript
Vue中的transition封装组件的实现方法
Aug 13 #Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
Aug 12 #Javascript
详解json串反转义(消除反斜杠)
Aug 12 #Javascript
json 带斜杠时如何解析的实现
Aug 12 #Javascript
You might like
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
php下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
简述php环境搭建与配置
2016/12/05 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
javascript 关闭IE6、IE7
2009/06/01 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
日语专业个人的求职信
2013/12/03 职场文书
班级活动策划书
2014/02/06 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
保护母亲河倡议书
2014/04/14 职场文书
商铺门前三包责任书
2014/07/25 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
团组织推优材料
2014/12/29 职场文书
网络销售员岗位职责
2015/04/11 职场文书
初二数学教学反思
2016/02/17 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
Flask response响应的具体使用
2021/07/15 Python