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 相关文章推荐
syntaxhighlighter 使用方法
Jul 02 Javascript
基于jquery的让textarea自适应高度的插件
Aug 03 Javascript
JS构建页面的DOM节点结构的实现代码
Dec 09 Javascript
jquery offset函数应用实例
Nov 14 Javascript
Jquery图片滚动与幻灯片的实例代码
Apr 08 Javascript
jquery选择器-根据多个属性选择示例代码
Oct 21 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
Oct 17 Javascript
Ajax清除浏览器js、css、图片缓存的方法
Aug 06 Javascript
javascript倒计时效果实现
Nov 12 Javascript
学习JavaScript设计模式之策略模式
Jan 12 Javascript
微信小程序全局变量改变监听的实现方法
Jul 15 Javascript
微信小程序实现轨迹回放的示例代码
Dec 13 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作为网站开发语言的原因分享
2012/01/03 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
浅谈php://filter的妙用
2019/03/05 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
python 实现多维数组转向量
2019/11/30 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python手写均值滤波
2020/02/19 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
python让函数不返回结果的方法
2020/06/22 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
2013届毕业生求职信范文
2013/11/20 职场文书
高中毕业自我鉴定
2013/12/16 职场文书
经销商会议欢迎词
2014/01/11 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
海飞丝广告词
2014/03/20 职场文书
微观世界观后感
2015/06/10 职场文书
干部考核工作总结
2015/08/12 职场文书
2016猴年春节问候语
2015/11/11 职场文书
5个实用的JavaScript新特性
2022/06/16 Javascript