第一篇: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. jQuery源码02--(3043 , 3183) Deferred : 延迟对象 : 对异步的统一管理

    //延迟对象 jQuery.extend({ Deferred: function( func ) { var tuples = [//resolve完成.reject未完成.notify进行中类似于 ...

  2. JSP从选择到放弃

    JSP为什么会出现?出现的原因? ①因为在开发web网站时候,返现servlet做界面比较麻烦,于是出现了jsp. 运行在服务端(Java server pages)基于servlet,对servle ...

  3. 值得学习的CSS知识

    这里零度给大家推荐几个值得学习的CSS技巧,能让你编写网页事半功倍!一.清除默认值 通常 padding 的默认值为 0,background-color 的默认值是 transparent.但是在不 ...

  4. 洛谷P2891 [USACO07OPEN]吃饭Dining

    题目描述 Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she w ...

  5. string StartsWith 方法 Https

    public ActionResult Index()        {            string url = "Https://www.baodu.com";      ...

  6. Logistic Regression and Newton's Method

    Data For this exercise, suppose that a high school has a dataset representing 40 students who were a ...

  7. Kinect 开发 —— 语音识别(下)

    使用定向麦克风进行波束追踪 (Beam Tracking for a Directional Microphone) 可以使用这4个麦克风来模拟定向麦克风产生的效果,这个过程称之为波束追踪(beam ...

  8. vs2010 Visula C++ 把CString 转换为string 类型

    CString strSomeCstring ("This is a CString Object"); // Use ANSI variant CStringA to conve ...

  9. 使用PLupload在同一页面中进行多个不同类型上传解决方案和一次多文件上传的注意事项

    首先感谢,http://www.cnblogs.com/2050/p/3913184.html 这篇文章作者. 在使用PLUpload之前个人先封装了一些常用配置,并且将success与error做为 ...

  10. nexus 搭建maven私服

    1. nexus 下载地址 https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.4-03-bundle.tar.g ...