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入门篇-文件操作
Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...
- O(n) 取得数组中每个元素右边第一个比它大的元素
题目: 给定一个整型数组,数组元素随机无序的,要求打印出所有元素右边第一个大于该元素的值. 如数组A=[6,8,9,2,3,5,6] 输出[8,9,-1,3,5,6,-1] 思路: 我们用栈来保存未找 ...
- 面向切面编程AOP——加锁、cache、logging、trace、同步等这些较通用的操作,如果都写一个类,则每个用到这些功能的类使用多继承非常难看,AOP就是解决这个问题的,python AOP就是装饰器
面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java中myba ...
- C# 模拟鼠标移动和点击
我们需要用到的mouse_event函数,位于user32.dll这个库文件里面,所以我们要先声明引用. [System.Runtime.InteropServices.DllImport(" ...
- ASP.NET Core ---- 系列文章
(13)ASP.NET Core 中的选项模式(Options) (12)ASP.NET Core 中的配置二(Configuration) (11)ASP.NET Core 中的配置一(Config ...
- 项目Alpha冲刺(团队)-测试篇
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:为了交项目干杯 测试用例:测试用例文档.zip 作业目标:描述项目的测试 ...
- T-sql 遍历结果集
DECLARE @TAB TABLE( [科室编号] [varchar](50) NULL, [科室编码] [varchar](50) NULL, [科室名称] [varchar](50) NULL, ...
- git和bootstrap
在linux系统中某种类型的服务有没有启动:ps -ef|grep 对应的服务名称 然后修改gitlab中的两个配置文件的信息 一般情况下是先创建组,然后在创建项目 常见的协议有http协议 ss ...
- 趣味编程:FizzBuzz(Haskell版)
g :: Int -> Int -> Int -> String g n 0 0 = "FizzBuzz" g n 0 _ = "Fizz" ...
- Uva11762 Race to 1——有向无环图&&记忆化搜索
题意 给出一个整数 $N$,每次可以在不超过 $N$ 的素数中等概率随机选择一个 $P$,如果 $P$ 是 $N$ 的约数,则把 $N$ 变成 $N/P$,否则 $N$ 不变.问平均情况下需要多少次随 ...