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 相关文章推荐
在网页中屏蔽快捷键
Sep 06 Javascript
js DOM的学习笔记
Dec 22 Javascript
Angular中的Promise对象($q介绍)
Mar 03 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
js Canvas实现圆形时钟教程
Sep 19 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
Dec 02 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
element-ui 中的table的列隐藏问题解决
Aug 24 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
微信小程序合法域名配置方法
May 06 Javascript
解决Layui中layer报错的问题
Sep 03 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
中东人咖啡哲学
2021/03/03 咖啡文化
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP实现事件机制的方法
2015/07/10 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
python安装教程
2018/02/28 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
python import 上级目录的导入
2020/11/03 Python
奥巴马演讲稿
2014/01/08 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
中层干部考核评语
2015/01/04 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
HttpClient实现表单提交上传文件
2022/08/14 Java/Android