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实现下拉刷新.上拉加载功能. 在项目中将 ...
- 微信小程序中如何实现分页下拉加载?(附源码)
转眼间坚持写教你微信小程序系列已经有十节系列课程了,每天的工作压力繁重,小女子也不知道自己还能坚持这样的系列教程多久.只希望每篇教程真的对大家有帮助.这节课我们要介绍的就是如何实现分页的下拉加载,我们 ...
随机推荐
- LinkedIn微服务框架rest.li
linkedin/rest.li https://github.com/linkedin/rest.li LinkedIn微服务框架rest.li摘要:Rest.li是一款REST+JSON框架,使 ...
- Domino系统从UNIX平台到windows平台的迁移及备份
单位机房的一台服务机器到折旧期了,换成了新购IBM机器X3950,而且都预装了windows 2003 server 标准版,所以只有把以前在Unix平台下跑的OA系统迁移到新的windows 200 ...
- Codefroces Educational Round 26 837 C. Two Seals
C. Two Seals time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- FreeModbus RTU slave & Modbus RTU master
一.FreeModbus RTU 协议数据格式 FreeModbus RTU是开源的一个协议,并且使用FreeModbus RTU 只能当做从机Slave,RTU协议中的指令由地址码(一个字节),功能 ...
- libssh2进行远程运行LINUX命令
/** * CSSHClient.h * @file 说明信息.. * DATE February 13 2015 * * @author Ming_zhang */ #ifndef _CSSHCLI ...
- iOS动画之模拟音量振动条
音量振动条 效果图: 假设实现? 创建3个layer.按顺序播放y轴缩放动画 利用CAReplicatorLayer实现 1.什么是CAReplicatorLayer? 一种能够复制自己子层的laye ...
- 修改android的wifi客户端名称的两种方法
修改android的wifi客户端名称的两种方法 手机连接到无线路由时,在dhcp的客户端列表里面是这样的名称"android-89425253e5de3a2",这就是安卓 ...
- widget-移除底部小部件内容
今天有一个要求,就是在调出手机窗口小部件的时候,让其中的某些小部件不显示.折腾了好久,虽然不知道原理,最终还是实现了屏蔽其中个别小部件的方法.记录下来 要想屏蔽底部小部件的显示,只需要把相关的类跟广播 ...
- android-Preference 风格调整
<CheckBoxPreference android:defaultValue="false" android:layout="?android:attr/pre ...
- using可以用于释放操作,相当于Dispose()
using可以用于释放操作,相当于Dispose()