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 上拉加载更多示例代码的更多相关文章

  1. android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

    Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableL ...

  2. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果

    最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...

  3. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多

    最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...

  4. h5 实现页面上拉加载更多数据

    您好,您的上拉加载更多的代码来喽: html:(style部分:html部分:js部分--js部分主要就是监控上拉,调接口) //上拉加载更多css <style> .wait-loadi ...

  5. vue移动端上拉加载更多

    LoadMore.vue <template> <div class="load-more-wrapper" @touchstart="touchSta ...

  6. vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多

    一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...

  7. google官方的下拉刷新+自定义上拉加载更多

    转载请标注转载:http://blog.csdn.net/oqihaogongyuan/article/details/50949118 google官方的下拉刷新+自定义上拉加载更多 现在很多app ...

  8. mui的上拉加载更多 下拉刷新 自己封装的demo

    ----------------------------------------------- 这是一个非常呆萌的程序妹子,深夜码的丑代码------------------------------- ...

  9. 微信小程序之下拉刷新,上拉加载更多

    近日开发微信小程序,发现上拉加载更多没有友好的API,而下拉刷新很nice,所以本人按照API,很简单的写了一个示例,希望对大家有帮助,本人用的是iview-webapp  小程序UI框架. 1. 首 ...

随机推荐

  1. Docker基础用法篇

    Docker基础用法篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装docker 1>.依赖的基础环境 64 bits CPU Linux Kerner 3.10+ ...

  2. 流Stream的关闭

    文章;MemoryStream.Close() or MemoryStream.Dispose() Close() and Dispose(), when called on a MemoryStre ...

  3. heapq 对有序的数组列表进行整体排序

    """ 功能:实现对有序的多个数组整体排序,获取top k个最小元素 """ from heapq import * def heap_so ...

  4. metasploit 一款开源的渗透测试框架

    渗透神器漏洞利用框架metasploit from: https://zhuanlan.zhihu.com/p/30743401 metasploit是一款开源的渗透测试框架软件也是一个逐步发展与成熟 ...

  5. python测试开发django-rest-framework-65.序列化(ModelSerializer)

    前言 serializers.Serializer可以对modle模型中的字段序列化,并且必须写create和update两个方法.ModelSerializer可以看成是Serializer的一个升 ...

  6. 如果在使用谷歌的gson的时候,在返回时间类型的数据的时候,

    可能会出现在long类型的时间后面多3个0 如下图所示 可以自己创建一个json序列化的类 public class Date2LongSerializer extends JsonSerialize ...

  7. 0031ActiveMQ的下载安装与启动

    消息中间件activemq的作用主要是解耦.异步.削峰. 我们按如下步骤详细讲解一下activemq的下载.安装与启动. 1.activemq的下载 下载地址: http://activemq.apa ...

  8. HttpContext对象下的属性Application、Cache、Request、Response、Server、Session、User

    概述: HttpContext封装关于单个HTTP请求的所有HTTP特定信息. HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以 ...

  9. postgresql 导入 导出(一张表)

    导入sql   -w  指定数据库名 psql -h 192.168.20.123 -p 5432 -w warehouse < /usr/20180808.sql 导出一张表sql   -w  ...

  10. Dubbo源码分析:设计总结

    设计原则 1.   多用组合,少用继承 2.   针对接口编程,不针对实现编程 3.   依赖抽象,不要依赖具体实现类. 设计模式 1.   策略设计模式:Dubbo扩展Spring的xml标签解析 ...