wepy小程序实现列表分页上拉加载(1)
列表页效果图:

1.新建列表页
(1)在pages里面新建一个list.wpy文件
初始代码结构如下:
<style lang="less"> </style> <template>
<view> </view>
</template> <script>
import wepy from 'wepy' export default class List extends wepy.page {
config = {
navigationBarTitleText: '演示上拉加载列表'
}
}
</script>
(2)配置列表页路由
打开app.wpy
在config里面的pages里添加'pages/list'
export default class extends wepy.app {
config = {
pages: [
'pages/home', // 首页
'pages/category', // 分类
'pages/cart', // 购物车
'pages/member', // 会员中心
'pages/list' // 列表页
],
//此处代码省略...
}
}
(3)在首页放一个列表页入口
打开首页home.wpy,添加一个导航,代码如下:
<template>
<view class="container">
<view class="nav"><navigator url="/pages/list">演示上拉加载列表</navigator></view>
</view>
</template>
记得执行npm run dev,再在微信开发者工具里预览
效果图如下:

点“演示上拉加载列表”即可进入列表页,当然现在是空的。接下来给它添加内容
2.制作一个列表
(1)打开list.wpy,样式和结构代码如下:
<style lang="less">
.list-wrapper {
.list {
.item {
text-align: center;
font-size: 36rpx;
line-height: 120rpx;
border-bottom: 2rpx solid #ddd;
&:nth-child(even) {
background-color: #f5f5f5;
}
}
}
}
</style> <template>
<view class="list-wrapper">
<view class="list">
<view class="item">1 演示上拉加载列表测试内容</view>
<view class="item">2 演示上拉加载列表测试内容</view>
<view class="item">3 演示上拉加载列表测试内容</view>
<view class="item">4 演示上拉加载列表测试内容</view>
<view class="item">5 演示上拉加载列表测试内容</view>
<view class="item">6 演示上拉加载列表测试内容</view>
<view class="item">7 演示上拉加载列表测试内容</view>
<view class="item">8 演示上拉加载列表测试内容</view>
</view>
</view>
</template>
js部分不动,所以不贴了
列表页效果如下:

现在是一个内容固定也不能滚动的页面。接下来要造点假数据
(2)为了看到效果,方便演示,建一个数据文件,我想造点假数据
在src下面新建一个文件夹data,在里面新建一个listData.js文件用来写一些数据
src/data/listData.js 代码如下:
const listData = [
'演示上拉加载列表测试内容',
'演示上拉加载列表测试内容',
'演示上拉加载列表测试内容'
// 更多内容自行复制粘贴,我本地有100条,这里为了避免太长省略了...
] export default listData
在list.wpy引入数据listData.js
list.wpy <script>代码如下:
import wepy from 'wepy'
import listData from '@/data/listData' // 引入数据listData export default class List extends wepy.page {
config = {
navigationBarTitleText: '演示上拉加载列表'
} data = {
list: listData // 引用数据
}
}
list.wpy列表结构代码改成循环
<template>
<view class="list-wrapper">
<view class="list">
<view wx:for="{{list}}" wx:key="index" item="item" class="item">
{{index + ' ' + item}}
</view>
</view>
</view>
</template>
css不动
(2)把列表改成垂直滚动的效果
这里用到小程序组件-试图容器-scroll-view
详细看官方文档 https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html
list.wpy结构代码如下:
<template>
<view class="list-wrapper">
<scroll-view scroll-y="true" style="height: 480px;" class="list">
<view wx:for="{{list}}" wx:key="index" item="item" class="item">
{{index + ' ' + item}}
</view>
</scroll-view>
</view>
</template>
style="height: 480px;" 为了演示初步效果,先将高度写死。
这里注意:scroll-view里面的内容高度必须大于容器本身的高度才能出发滚动效果
在实际项目中,scroll-view的高度是不能写死的,是需要自适应各种设备屏幕高度的。回头再详说。
效果如下:

3.实现上拉加载
为了实现上拉加载,首先我们要模拟分页,把数据分段显示。在实际项目中,通过请求接口数据,这里为了方便演示,只能用死数据了。
(1)数据分段(分页)显示
在onLoad()方法里面先处理下数据,取10条数据,赋值给list
list.wpy js代码如下:
export default class List extends wepy.page {
config = {
navigationBarTitleText: '演示上拉加载列表'
}
data = {
list: []
}
onLoad () {
const listChunk = listData.slice(0, 10)
this.list = listChunk
}
}
(2)在scroll-view标签上添加bindscrolltolower事件,绑定loadMore方法
<scroll-view scroll-y="true" style="height: 480px;" bindscrolltolower="loadMore" class="list">
<view wx:for="{{list}}" wx:key="index" item="item" class="item">
{{index + ' ' + item}}
</view>
</scroll-view>
(3)添加loadMore方法,跟onLoad方法平级,不是在methods里面
onLoad () {
// 此处代码省略...
}
loadMore() {
// 加载下一页代码
}
(4)分页加载的思路:在data对象里添加2个成员,用来记录当前页码,每次加载10条
data = {
list: [],
currentPage: 1, // 页码
pageSize: 8 // 一页条数
}
每触发一次上拉动作,currentPage就要加1,listData数组截取的位置就要往后推,所以我封装了一个方法来截取数组
(5)添加数组截取方法listSlice
listSlice方法跟onLoad方法平级,不是methods里面
listSlice(cur) {
// cur参数表示当前页码
let start = (cur - 1) * this.page // 开始位置
let end = cur * this.pageSize // 结束位置
let listChunk = listData.slice(start, end) // 截取数据数组
this.list = [...this.list, ...listChunk] // 扩展this.list
}
(6)在loadMore方法里调用listSlice
loadMore() {
console.log('页数:', this.currentPage) // console打印页数
this.currentPage++ // 每执行一次loadMore,页码自增
this.listSlice(this.currentPage) // 调用截取方法
}
初次加载跟后面的加载略有不同,slice()方法的开始位置不同,所以就直接写在onLoad里,就不去改了。
(7)至此,滚动加载分页完成
4.优化-添加加载动画
见下一篇:wepy小程序实现列表分页上拉加载(2)
wepy小程序实现列表分页上拉加载(1)的更多相关文章
- wepy小程序实现列表分页上拉加载(2)
第一篇:wepy小程序实现列表分页上拉加载(1) 本文接着上一篇内容: 4.优化-添加加载动画 (1)首先写加载动画的结构和样式 打开list.wpy文件 template结构代码: <temp ...
- 微信小程序开发——列表分页上拉加载封装实现(订单列表为例,订单状态改变后刷新列表滚动位置不变)
业务需求: 业务需求是给订单列表添加分页功能,也就是上拉加载这种每次只请求加载固定数量的数据. 需求分析: 对业务来说就是简单的分页上拉加载,但是对于技术实现来说,除了要处理分页数据的累加加载,还要处 ...
- 【微信小程序】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实现下拉刷新.上拉加载功能. 在项目中将 ...
- 微信小程序中如何实现分页下拉加载?(附源码)
转眼间坚持写教你微信小程序系列已经有十节系列课程了,每天的工作压力繁重,小女子也不知道自己还能坚持这样的系列教程多久.只希望每篇教程真的对大家有帮助.这节课我们要介绍的就是如何实现分页的下拉加载,我们 ...
随机推荐
- region实现大纲效果
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- SQL Server performance for alter table alter column change data type
最近在搞一个升级脚本,发现有一张业务表中的某些字段长度需要调整,直接使用alter table alter column进行修改发现修改一列要用十几分钟!!!两三个列那用时简直不能容忍啊!google ...
- BZOJ 4582 贪心
思路: 显然是个贪心 排个序 然后扫几遍就好了 (重叠的区间不能取) //By SiriusRen #include <cstdio> #include <algorithm> ...
- fetch 封装
fetch.js var http = { get: function (url) { return new Promise((resolve, reject) => { fetch(url) ...
- Easy mock - 安装配置和基本使用
Easy-mock easy-mock是一款比较好用的接口模拟工具, 使用之前我们需要安装和配置 需要下载的内容有以下 Node Redis MongoDB Node和Redis一路点下一步就行, M ...
- FileChannel的深入理解
一,官方描写叙述 一个读,写,映射,操作文件的通道. 文件通道有能够被查询和改动的一个当前位置.文件本身包括了一个可悲读写的变长字节序列,而且它的当前的size会被查询.当被写入的字节超过当前文件的大 ...
- hdoj-1289-A Bug's Life【种类并查集】
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【hadoop之翊】——CentOS6.5 Linux上面编译Hadoop2.4源代码
今天来说说编译hadoop源代码的事情吧~ 1.首先下载源代码 地址:http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.4.0/ 2.加压t ...
- 兔子--ps中的基本工具总结(ps cs5)
矩形选框工具 椭圆选框工具 单行选框工具 单列选框工具 移动工具 套索工具柜 多边形套索工具 磁性套索工具 魔棒工具 高速选择工具 裁剪工具 切片工具 切片选择工具 吸管工具 颜色取样器工具 标尺工具 ...
- onvif开发实战2--总结框架搭建
完成框架搭建后,编写自己的主函数起onvif服务 编写makefile objs = onvif.o onvif_func.o duration.o soapC.o soapServer.o stds ...