vue mpvue 上拉加载更多示例代码
vue 上拉加载更多示例代码
可以比较简单的改为 mpvue , 去除滚动判断,直接放在 onReachBottom 周期即可。
html
<div id="app">
<div class="integralPage">
<div class="itemList">
<div class="itemBox" v-for="(item, index) in list" :key="index">
<div class="info">
<div class="title">{{item.title}}</div>
<div class="time">{{item.time}}</div>
</div>
<div class="num">{{item.num}}</div>
</div>
</div>
<div class="laodMore">
<div v-show="logStatus === 0">
<div>上拉加载</div>
</div>
<div v-show="logStatus === 1">
<div>正在加载</div>
</div>
<div v-show="logStatus === 2">
<div>没有更多数据了</div>
</div>
</div>
</div>
</div>
js
const obj = {
el: '#app',
data: {
list: [],
listParam: {
page: 1,
},
noData: false,
logStatus: 0,
},
created() {
setTimeout(() => {
this.list = [...new Array(20).keys()].map(item => ({ // 初始化数据
title: +new Date() + '签到' + item,
time: '2019/8/13 15:23:22',
num: '+10',
}))
this.listParam.page += 1
}, 500);
window.addEventListener('scroll', this.onScroll)
},
methods: {
onScroll() { // 如果是小程序, 不用监听滚动事件, 也不用户判断高度, 因为小程序有触底事件 onReachBottom , 直接在其中写请求逻辑即可
this.logStatus = 1
let innerHeight = document.querySelector('#app').clientHeight // #app 是为了获取最外部 div 的高度
let outerHeight = document.documentElement.clientHeight
let scrollTop = document.documentElement.scrollTop
console.log('onScroll', outerHeight, scrollTop, outerHeight + scrollTop, innerHeight)
if (outerHeight + scrollTop === innerHeight) { // 可以在这个地方给 innerHeight 添加适当的高度调整效果
if (this.noData === true) {
this.logStatus = 2
return false
}
setTimeout(() => {
const data = { // 请求回来的数据
rows: [...new Array(10).keys()].map(item => ({
title: +new Date() + '签到' + item,
time: '2019/8/13 15:23:22',
num: '+10',
})),
count: 40, // 服务器上总数
}
if (this.list.length < data.count) { // 本地总数是否大于服务器总数
this.list = [...this.list, ...data.rows]
this.listParam.page = this.listParam.page + 1
this.logStatus = 0
} else {
this.logStatus = 2
this.noData = true
}
}, 500);
}
}
}
}
const $vue = new Vue(obj)
less
.integralPage {
font-size: 14px;
color: #101010;
// 分类列表
.itemList {
border-top: 1px solid #bbb;
margin-left: 12px;
margin-right: 12px;
.itemBox {
margin-left: 16px;
margin-right: 2px;
border-bottom: 1px solid #E8E8E8;
padding-top: 7px;
padding-bottom: 7px;
overflow: hidden;
.info {
float: left;
max-width: 80%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
.time {
font-size: 10px;
color: #878686;
}
}
.num {
padding-top: 10px;
padding-right: 10px;
float: right;
}
}
}
// 上拉加载
.laodMore {
padding-top: 8px;
padding-bottom: 8px;
color: #ccc;
text-align: center;
}
}
mpvue
<template>
<div class="integralPage">
<div class="itemList">
<div class="itemBox" v-for="(item, index) in list" :key="index">
<div class="info">
<div class="title">{{item.title}}</div>
<div class="time">{{item.time}}</div>
</div>
<div class="num">{{item.num}}</div>
</div>
</div>
<div class="laodMore">
<div v-show="logStatus === 0">
<div>上拉加载</div>
</div>
<div v-show="logStatus === 1">
<div>正在加载</div>
</div>
<div v-show="logStatus === 2">
<div>没有更多数据了</div>
</div>
</div>
</div>
</template>
<script>
export default {
data () {
return {
list: [],
listParam: {
page: 1,
},
noData: false,
logStatus: 0,
}
},
// 上拉加载,拉到底部触发
onReachBottom() {
this.onScroll()
},
created() {
setTimeout(() => {
this.list = [...new Array(20).keys()].map(item => ({ // 初始化数据
title: +new Date() + '签到' + item,
time: '2019/8/13 15:23:22',
num: '+10',
}))
this.listParam.page += 1
}, 500);
},
methods: {
onScroll() { // 如果是小程序, 不用监听滚动事件, 也不用户判断高度, 因为小程序有触底事件 onReachBottom , 直接在其中写请求逻辑即可
this.logStatus = 1
// 可以在这个地方给 innerHeight 添加适当的高度调整效果
if (this.noData === true) {
this.logStatus = 2
return false
}
setTimeout(() => {
const data = { // 请求回来的数据
rows: [...new Array(10).keys()].map(item => ({
title: +new Date() + '签到' + item,
time: '2019/8/13 15:23:22',
num: '+10',
})),
count: 40, // 服务器上总数
}
if (this.list.length < data.count) { // 本地总数是否大于服务器总数
this.list = [...this.list, ...data.rows]
this.listParam.page = this.listParam.page + 1
this.logStatus = 0
} else {
this.logStatus = 2
this.noData = true
}
}, 500);
}
}
}
</script>
<style lang="scss" scoped>
.integralPage {
font-size: 14px;
color: #101010;
// 分类列表
.itemList {
border-top: 1px solid #bbb;
margin-left: 12px;
margin-right: 12px;
.itemBox {
margin-left: 16px;
margin-right: 2px;
border-bottom: 1px solid #E8E8E8;
padding-top: 7px;
padding-bottom: 7px;
overflow: hidden;
.info {
float: left;
max-width: 80%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
.time {
font-size: 10px;
color: #878686;
}
}
.num {
padding-top: 10px;
padding-right: 10px;
float: right;
}
}
}
// 上拉加载
.laodMore {
padding-top: 8px;
padding-bottom: 8px;
color: #ccc;
text-align: center;
}
}
</style>
vue mpvue 上拉加载更多示例代码的更多相关文章
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableL ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- h5 实现页面上拉加载更多数据
您好,您的上拉加载更多的代码来喽: html:(style部分:html部分:js部分--js部分主要就是监控上拉,调接口) //上拉加载更多css <style> .wait-loadi ...
- vue移动端上拉加载更多
LoadMore.vue <template> <div class="load-more-wrapper" @touchstart="touchSta ...
- vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多
一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...
- google官方的下拉刷新+自定义上拉加载更多
转载请标注转载:http://blog.csdn.net/oqihaogongyuan/article/details/50949118 google官方的下拉刷新+自定义上拉加载更多 现在很多app ...
- mui的上拉加载更多 下拉刷新 自己封装的demo
----------------------------------------------- 这是一个非常呆萌的程序妹子,深夜码的丑代码------------------------------- ...
- 微信小程序之下拉刷新,上拉加载更多
近日开发微信小程序,发现上拉加载更多没有友好的API,而下拉刷新很nice,所以本人按照API,很简单的写了一个示例,希望对大家有帮助,本人用的是iview-webapp 小程序UI框架. 1. 首 ...
随机推荐
- python学习之多窗口切换
多窗口切换: from selenium import webdriver d = webdriver.Firefox() d.window_handles #显示所有的窗口 d.current_wi ...
- python测试开发django-58.MySQL server has gone away错误的解决办法
前言 使用django执行sql相关操作的时候,出现一个"MySQL server has gone away"错误,后来查了下是sql执行过程中,导入的文件较大时候,会出现这个异 ...
- [转]kafka要等一段时间才能消费到数据
kafka要等一段时间才能消费到数据 pythonkafka 为什么用python写的kafka客户端脚本,程序一运行就能生产数据,而要等一段时间才能消费到数据(topic里面有数据).(pyk ...
- for循环:从键盘输入一个正整数n,
#include<stdio.h>void main(){ int i,n,sum=0; //声明三个整型变量,并为变量sum初始化赋值为0// printf("Please e ...
- OLED液晶屏幕(2)取模软件
https://blog.csdn.net/ling3ye/article/details/53399305 文件夹说明: Adafruit_SSD1306-master ——SSD1306库(O ...
- Web 项目的文件/文件夹上传下载
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- 使用if和switch制作简单的年龄生肖判断
-年 查询 --> var oDiv =document.getElementById("cont"); var oYear = document.getElementByI ...
- Tomcat启动问题:严重[main] org.apache.catalina.core.AprLifecycleListener.init An incompatible version...
今天观察tomcat启动日志,有一些以前没注意到的信息: 严重 [main] org.apache.catalina.core.AprLifecycleListener.init An incompa ...
- mysql ERROR 1862 (HY000): 密码超时错误解决 Your password has expired.To log in you must change it using a client that supports expired password
工具链接可能报错,使用黑窗口链接后: 1. SET PASSWORD = PASSWORD("xinmima"); 2. flush privileges; 使用新密码链接即可.
- art-template模板引擎高级使用
一.结合express的基本使用 // npm下载express/art-template/express-art-tempalte,并且加载 var express=require('express ...