第一篇:wepy小程序实现列表分页上拉加载(1)

本文接着上一篇内容:

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)的更多相关文章

  1. wepy小程序实现列表分页上拉加载(1)

    使用wepy开发微信小程序商城第一篇:项目初始化 使用wepy开发微信小程序商城第二篇:路由配置和页面结构 列表页效果图: 1.新建列表页 (1)在pages里面新建一个list.wpy文件 初始代码 ...

  2. 微信小程序开发——列表分页上拉加载封装实现(订单列表为例,订单状态改变后刷新列表滚动位置不变)

    业务需求: 业务需求是给订单列表添加分页功能,也就是上拉加载这种每次只请求加载固定数量的数据. 需求分析: 对业务来说就是简单的分页上拉加载,但是对于技术实现来说,除了要处理分页数据的累加加载,还要处 ...

  3. 【微信小程序】scroll-view 的上拉加载和下拉刷新

    1.在微信小程序中,想到 下拉刷新 和 上拉加载,如果是整个页面都拖动的话,可以在页面配置中,配置 enablePullDownRefresh 和 onReachBottomDistance 然后在 ...

  4. 移动端h5列表页上拉加载更多

    背景 上星期公司要求做一个回收书籍的h5给安卓用,里面有一个功能是回收记录列表.设计师那边出的稿子是没有要求分页或者是上拉刷新的,但是众所周知,列表页数据很多的情况下,h5加载是很慢的.所以我一开始是 ...

  5. mui实现分页上拉加载更多 下拉刷新数据的简单实现 移动端下拉上拉

    空下来把mui上拉加载更多,下拉刷新数据做了一个简单的实现,希望可以帮助到需要的朋友 demo项目的结构 <!DOCTYPE html> <html> <head> ...

  6. 移动端web页面列表类上拉加载,查看详情,iframe嵌套第三方页面遇到的问题以及解决办法

    1.移动端上拉加载 网上有很多成熟的插件,比如iscroll.在这里介绍一下用jquery和js写的上拉加载方法.使用原生的去写上拉加载更多需要三个高度去做对比,以新闻类列表举例,首先需要整个dom的 ...

  7. Flutter 流式布局列表实例+上拉加载

    页面变化的几种方式: 一.StatefulWidget的setState形式 先声明两个变量. ; List<Map> list = []; 写了一个方法,获取数据: void _getH ...

  8. RecyclerViewLoadMoreDemo【封装上拉加载功能的RecyclerView,搭配SwipeRefreshLayout实现下拉刷新】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装含有上拉加载功能的RecyclerView,然后搭配SwipeRefreshLayout实现下拉刷新.上拉加载功能. 在项目中将 ...

  9. 微信小程序中如何实现分页下拉加载?(附源码)

    转眼间坚持写教你微信小程序系列已经有十节系列课程了,每天的工作压力繁重,小女子也不知道自己还能坚持这样的系列教程多久.只希望每篇教程真的对大家有帮助.这节课我们要介绍的就是如何实现分页的下拉加载,我们 ...

随机推荐

  1. package-判断安装应用是否存在

    今天在修改一个bug的时候,遇到一个问题,就是一个应用卸载了以后,在超级用户权限界面仍然会加载进来这个应用的相关信息.自己修改的时候,为了方便,就直接使用了里面一个加载图标的代码作为条件,也就是说,如 ...

  2. elasticsearch index 功能源码概述

    从本篇开始,对elasticsearch的介绍将进入数据功能部分(index),这一部分包括索引的创建,管理,数据索引及搜索等相关功能.对于这一部分的介绍,首先对各个功能模块的分析,然后详细分析数据索 ...

  3. js ---- 函数防抖

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  4. 如何解决Linux下的软件包依赖问题

    650) this.width=650;" border="0" alt="" src="http://img1.51cto.com/att ...

  5. 关于IDEA编译器在初次使用thymeleaf 引入无效 , 导致th无法使用的原因

    首先pom.xml里面要导入thymeleaf的依赖 然后在html中加入  xmlns:th="http://www.thymeleaf.org" 最后点击file ---> ...

  6. 【Codeforces Round #457 (Div. 2) B】Jamie and Binary Sequence

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把n分解成二进制的形式. n=2^a0+2^a1+...+2^a[q-1] 则固定就是长度为q的序列. 要想扩展为长为k的序列. 可 ...

  7. Java生产者与消费者(上)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 生产与消费者模式,是编程中最常用的模式之一,在多线程中应用比较明显.个人理解:在自助餐厅,厨师在不断 ...

  8. 软件project经验总结系列之三 - 计划阶段控制

    本文为软件project经验总结系列文章的第三篇.按照总论文章所设立的范围划分,本阶段重点讲述计划阶段的控制过程以及控制思路,笔者所站在的角度是乙方角度来进行表述整个阶段的推动过程,但对于甲方公司其基 ...

  9. jodd-servlet工具集锦

    Jodd提供了许多servlet和jsp相关的工具. Utils ServletUtils类集成了不同的servlet工具,你可以检测multipart请求,读取授权头,下载预备,cookie操作,读 ...

  10. HDU 1548 A strange lift(最短路&&bfs)

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...