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 相关文章推荐
JQquery的一些使用心得分享
Aug 01 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
Jan 28 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
Feb 21 Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 Javascript
JavaScript用构造函数如何获取变量的类型名
Dec 23 Javascript
AngularJS constant和value区别详解
Feb 28 Javascript
D3.js进阶系列之CSV表格文件的读取详解
Jun 06 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
Jun 12 Javascript
对vux点击事件的优化详解
Aug 28 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
Dec 06 Javascript
原生js 实现表单验证功能
Feb 08 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
python自然语言编码转换模块codecs介绍
2015/04/08 Python
Python函数参数类型*、**的区别
2015/04/11 Python
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
为什么说python适合写爬虫
2020/06/11 Python
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
主办会计岗位职责
2014/03/13 职场文书
小学语文课后反思精选
2014/04/25 职场文书
公司周年庆活动方案
2014/08/25 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers