前序:在使用vue做一个h5项目的时候,需要上拉分页加载,实践中总结一下:

首先要安装mint-ui

npm i mint-ui -S

 然后引入,一般在main.js里面

import Vue from 'vue'
import MintUI from 'mint-ui'
import 'mint-ui/lib/style.css'
import App from './App.vue'

下面是实现上拉加载的代码

<template>
<div class="page-loadmore">
<h1 class="page-title">Pull up</h1>
<p class="page-loadmore-desc">在列表底部, 按住 - 上拉 - 释放可以获取更多数据</p>
<p class="page-loadmore-desc">translate : {{ translate }}</p>
<div class="loading-background" :style="{ transform: 'scale3d(' + moveTranslate + ',' + moveTranslate + ',1)' }">
translateScale : {{ moveTranslate }}
</div> <div class="page-loadmore-wrapper" ref="wrapper" :style="{ height: wrapperHeight + 'px' }">
<mt-loadmore :top-method="loadTop" @translate-change="translateChange" @top-status-change="handleTopChange" :bottom-method="loadBottom" @bottom-status-change="handleBottomChange" :bottom-all-loaded="allLoaded" ref="loadmore"> <ul class="page-loadmore-list">
<li v-for="item in list" class="page-loadmore-listitem">{{ item }}</li>
</ul>
<div slot="top" class="mint-loadmore-top">
<span v-show="topStatus !== 'loading'" :class="{ 'is-rotate': topStatus === 'drop' }">↓</span>
<span v-show="topStatus === 'loading'">
<mt-spinner type="snake"></mt-spinner>
</span>
</div> <div slot="bottom" class="mint-loadmore-bottom">
<span v-show="bottomStatus !== 'loading'" :class="{ 'is-rotate': bottomStatus === 'drop' }">↑</span>
<span v-show="bottomStatus === 'loading'">
<mt-spinner type="snake"></mt-spinner>
</span>
</div> </mt-loadmore>
</div>
</div>
</template>
<script type="text/babel">
export default {
data() {
return {
list: [],
allLoaded: false,
bottomStatus: '',
wrapperHeight: 0,
topStatus: '',
//wrapperHeight: 0,
translate: 0,
moveTranslate: 0
};
},
methods: {
handleBottomChange(status) {
this.bottomStatus = status;
},
loadBottom() {
setTimeout(() => {
let lastValue = this.list[this.list.length - 1];
if (lastValue < 40) {
for (let i = 1; i <= 10; i++) {
this.list.push(lastValue + i);
}
} else {
this.allLoaded = true;
}
this.$refs.loadmore.onBottomLoaded();
}, 1500);
},
handleTopChange(status) {
this.moveTranslate = 1;
this.topStatus = status;
},
translateChange(translate) {
const translateNum = +translate;
this.translate = translateNum.toFixed(2);
this.moveTranslate = (1 + translateNum / 70).toFixed(2);
},
loadTop() {
setTimeout(() => {
let firstValue = this.list[0];
for (let i = 1; i <= 10; i++) {
this.list.unshift(firstValue - i);
}
this.$refs.loadmore.onTopLoaded();
}, 1500);
}, },
created() {
for (let i = 1; i <= 20; i++) {
this.list.push(i);
}
}, mounted() {
this.wrapperHeight = document.documentElement.clientHeight - this.$refs.wrapper.getBoundingClientRect().top;
}
};
</script> <style> .loading-background, .mint-loadmore-top span {
-webkit-transition: .2s linear;
transition: .2s linear;
}
.mint-loadmore-top span {
display: inline-block;
vertical-align: middle;
} .mint-loadmore-top span.is-rotate {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
} .page-loadmore .mint-spinner {
display: inline-block;
vertical-align: middle
} .page-loadmore-desc {
text-align: center;
color: #666;
padding-bottom: 5px
} .page-loadmore-desc:last-of-type,
.page-loadmore-listitem {
border-bottom: 1px solid #eee
} .page-loadmore-listitem {
height: 50px;
line-height: 50px;
text-align: center
} .page-loadmore-listitem:first-child {
border-top: 1px solid #eee
} .page-loadmore-wrapper {
overflow: scroll
} .mint-loadmore-bottom span {
display: inline-block;
-webkit-transition: .2s linear;
transition: .2s linear;
vertical-align: middle
} .mint-loadmore-bottom span.is-rotate {
-webkit-transform: rotate(180deg);
transform: rotate(180deg)
} </style>

  

最新文章

  1. css样式多个类、标签用【逗号 空格 冒号 点】分开的解析
  2. Hibernate QBC运算符
  3. webstorm的中文教程和技巧分享
  4. jQuery DataTables &amp;&amp; Django serializer
  5. eclipse 代码自动提示
  6. mysql的事务处理与锁表
  7. CSS兼容性(IE和Firefox)技巧大全
  8. NFC(8)关于新买的标签的格式化
  9. sdfsdf
  10. 第一局 ThreeJS-开始
  11. openstack的最简单安装
  12. JavaScript -- 时光流逝(十二):DOM -- Element 对象
  13. NFV组播实验对照
  14. TensorFlow函数教程:tf.nn.dropout
  15. (转)eclipse上传项目到码云
  16. Python 语法糖装饰器的应用
  17. Gluster vs Ceph:开源存储领域的正面较量
  18. 练习SQL代码
  19. 如何生成SPFILE文件
  20. 2、C++

热门文章

  1. labeled statement:标签语句
  2. Mosquitto-1.5在Linux上的安装以及Android客户端的实现
  3. Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知
  4. Java语法基础学习DayTwelve(泛型)
  5. JavaScript 注意要点
  6. springboot区分开发、测试、生产多环境的应用配置(二)
  7. 16.求Sn=a+aa+aaa+aaaa.......之值
  8. C# 之TripleDESCryptoServiceProvider类加密/解密程序
  9. 清楚理解const_cast类型转换
  10. 机器视觉:SSD Single Shot MultiBox Detector