wepy小程序实现列表分页上拉加载(2)
本文接着上一篇内容:
4.优化-添加加载动画
(1)首先写加载动画的结构和样式
打开list.wpy文件
template结构代码:
<template>
<view class="list-wrapper">
<!-- 滚动列表 -->
<scroll-view scroll-y="true" style="height: 400px;" bindscrolltolower="loadMore" class="list">
<view wx:for="{{list}}" wx:key="index" item="item" class="item">
{{index + ' ' + item}}
</view>
</scroll-view>
<!-- 加载动画结构代码 -->
<view class="loadMoreGif" wx:if="{{loadingShow}}">
<image src="../images/loadding.gif" />
<text>正在加载中</text>
</view>
</view>
</template>
样式代码:
.loadMoreGif {
margin: 15rpx auto;
width: 220rpx;
display: flex;
justify-content: center;
align-items: center;
text {
font-size: 30rpx;
color: #999;
margin-left: 10rpx;
}
image {
width: 30rpx;
height: 30rpx;
}
}
loadding.gif
(2)list.wpy js代码 data对象里添加 loadingShow: false
data = {
// ...
loadingShow: false
}
加载动画默认是隐藏的。当鼠标滑到列表底部,触发加载数据的时候,让加载动画显示,数据加载完成后让加载动画隐藏。
list.wpy js代码 loadMore方法里面:
loadMore() {
console.log('页数:', this.currentPage)
// 开启加载动画
this.loadingShow = true
this.currentPage++
setTimeout(() => {
// 模拟数据
this.listSlice(this.currentPage)
// 模拟异步时差,3秒后关闭加载动画
this.loadingShow = false
// 记得重载dom,否则无效哦
this.$apply()
}, 3000);
}
最终效果:
实际项目中,数据异步请求,要防止重复请求。这里无法模拟异步请求的场景,就不写了。
5.优化-暂无数据
数据缺省有两种情况,一种是列表内容为空,另一种是列表上拉加载时没有更多数据。
(1)列表为空时的条件渲染
打开list.wpy,template部分代码:
<template>
<view class="list-wrapper">
<view wx:if="{{list.length}}">
<!-- 滚动列表 -->
<scroll-view scroll-y="true" style="height: 400px;" bindscrolltolower="loadMore" class="list">
<view wx:for="{{list}}" wx:key="index" item="item" class="item">
{{index + ' ' + item}}
</view>
</scroll-view>
<!-- 加载动画结构代码 -->
<view class="loadMoreGif" wx:if="{{loadingShow}}">
<image src="../images/loadding.gif" />
<text>正在加载中</text>
</view>
</view>
<!-- 没有列表数据时的渲染条件 -->
<view wx:else class="listNone">
<view><image src="../images/item-empty.png" /></view>
<text>暂无数据</text>
</view>
</view>
</template>
给scroll-view滚动列表和加载动画等内容外面包了一层容器,列表为空时这些都不用显示,走wx:else
css样式代码:
.listNone {
position: fixed;
top: 30%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
color: #999;
image {
width: 212rpx;
height: 312rpx;
margin-bottom: 20rpx;
}
}
这里为了演示没有数据的效果,我把onLoad()里面的代码都注释掉了
onLoad() {
// const listChunk = listData.slice(0, 8)
// if (!listChunk.length) {
// this.noDataShow = true
// } else {
// this.list = listChunk
// }
}
npm run dev 打开微信开发者工具预览:
(2)上拉加载时没有更多数据
list.wpy template部分代码修改:
在scroll-view标签里面追加代码
<view class="nodata" wx:if="{{noDataShow}}">没有更多数据</view>
css代码如下:
.nodata {
text-align: center;
color: #999;
line-height: 48rpx;
margin: 30rpx 10rpx;
font-size: 28rpx;
}
在js代码 data对象里添加 noDataShow: false
默认不显示,在加载数据后显示
listSlice (cur) {
// let start = (cur - 1) * this.pageSize
// let end = cur * this.pageSize
// let listChunk = listData.slice(start, end)
let listChunk = []
if (!listChunk.length) {
// 没有数据时显示“没有更多数据”
this.noDataShow = true
} else {
this.list = [...this.list, ...listChunk]
this.noDataShow = false
}
}
为了演示没有更多数据的效果,把数据的代码注释掉了。
最终效果如下:
本篇完
wepy小程序实现列表分页上拉加载(2)的更多相关文章
- wepy小程序实现列表分页上拉加载(1)
使用wepy开发微信小程序商城第一篇:项目初始化 使用wepy开发微信小程序商城第二篇:路由配置和页面结构 列表页效果图: 1.新建列表页 (1)在pages里面新建一个list.wpy文件 初始代码 ...
- 微信小程序开发——列表分页上拉加载封装实现(订单列表为例,订单状态改变后刷新列表滚动位置不变)
业务需求: 业务需求是给订单列表添加分页功能,也就是上拉加载这种每次只请求加载固定数量的数据. 需求分析: 对业务来说就是简单的分页上拉加载,但是对于技术实现来说,除了要处理分页数据的累加加载,还要处 ...
- 【微信小程序】scroll-view 的上拉加载和下拉刷新
1.在微信小程序中,想到 下拉刷新 和 上拉加载,如果是整个页面都拖动的话,可以在页面配置中,配置 enablePullDownRefresh 和 onReachBottomDistance 然后在 ...
- 移动端h5列表页上拉加载更多
背景 上星期公司要求做一个回收书籍的h5给安卓用,里面有一个功能是回收记录列表.设计师那边出的稿子是没有要求分页或者是上拉刷新的,但是众所周知,列表页数据很多的情况下,h5加载是很慢的.所以我一开始是 ...
- mui实现分页上拉加载更多 下拉刷新数据的简单实现 移动端下拉上拉
空下来把mui上拉加载更多,下拉刷新数据做了一个简单的实现,希望可以帮助到需要的朋友 demo项目的结构 <!DOCTYPE html> <html> <head> ...
- 移动端web页面列表类上拉加载,查看详情,iframe嵌套第三方页面遇到的问题以及解决办法
1.移动端上拉加载 网上有很多成熟的插件,比如iscroll.在这里介绍一下用jquery和js写的上拉加载方法.使用原生的去写上拉加载更多需要三个高度去做对比,以新闻类列表举例,首先需要整个dom的 ...
- Flutter 流式布局列表实例+上拉加载
页面变化的几种方式: 一.StatefulWidget的setState形式 先声明两个变量. ; List<Map> list = []; 写了一个方法,获取数据: void _getH ...
- RecyclerViewLoadMoreDemo【封装上拉加载功能的RecyclerView,搭配SwipeRefreshLayout实现下拉刷新】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装含有上拉加载功能的RecyclerView,然后搭配SwipeRefreshLayout实现下拉刷新.上拉加载功能. 在项目中将 ...
- 微信小程序中如何实现分页下拉加载?(附源码)
转眼间坚持写教你微信小程序系列已经有十节系列课程了,每天的工作压力繁重,小女子也不知道自己还能坚持这样的系列教程多久.只希望每篇教程真的对大家有帮助.这节课我们要介绍的就是如何实现分页的下拉加载,我们 ...
随机推荐
- Android上玩玩Hook?
在中国互联网这片弱肉强食的丛林中.封闭抄袭是垄断巨头的通行证.创新是弱小创业者的墓志铭. 了解Hook 还没有接触过Hook技术读者一定会对Hook一词感觉到特别的陌生.Hook英文翻译过来就是&qu ...
- js插件---markdown如何使用
js插件---markdown如何使用 一.总结 一句话总结:看文档,看api,看参数列表,看js调用插件的调用函数的参数(json) 1.js和css的问题:如何知道插件要引入哪些js和css? a ...
- C#制作文本转换为声音的demo,保存音频文件到本地
TTS(Text To Speech)可以实现把文本转换成语音并朗读出来.Windows Xp可以使用Com组件--Microsoft Speech Object Library实现TTS,Windo ...
- Kinect 开发 —— 开发前的准备工作
Kinect SDK v1.5 支持托管语言和非托管语言 Xbox360的游戏是基于Xbox360开发工具包 (XDK)开发的,Xbox 360和Windows是两个完全不同的系统架构.使用Kinec ...
- XML学习总结(1)——XML入门
一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(processing instruction ...
- oracle多实例的启动与关闭
Oracle/oracle登录 1.启监听器 lsnrctl start 监听一般不需要动,如果机器重新启动的话需要将监听启动. 查看当前SID:echo $ORACLE_SID 2.启动数据库实例: ...
- php excel文件导出之phpExcel扩展库
php Excel 文件导出 phpExcel 官网 http://phpexcel.codeplex.com/ /** * 导出特定文件 * 依据详细情况而定 */ public function ...
- DG观察日志传输
--primary端查询v$archived_log视图,确认日志是否被应用: set lines 300 pages 300 col name for a20 select name,dest_ ...
- vue项目使用axios
使用: npm install axios --save-dev 在main.js中import: 使用: (1):POST方式 let data= [{receiveAdd:receiveAddVa ...
- 解决sublime text3配置Python3编译环境:运行代码时提示“NO Build System”
只需要在路径中把单杠换成双杠,重启sublime即可.