使用wepy开发微信小程序商城第一篇:项目初始化

使用wepy开发微信小程序商城第二篇:路由配置和页面结构

列表页效果图:

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

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

    第一篇:wepy小程序实现列表分页上拉加载(1) 本文接着上一篇内容: 4.优化-添加加载动画 (1)首先写加载动画的结构和样式 打开list.wpy文件 template结构代码: <temp ...

  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. 42.cnpm不是内部命令的解决方案:配置环境变量

    转自:https://blog.csdn.net/u014540814/article/details/78777961

  2. 图片的title属性和alt属性的区别

    在前端开发中,经常遇到有人在问图片的alt属性和title属性的区别,这是因为很多人对于alt属性和title属性没有彻底搞明白,今天零度给大家分析分析. title属性 首先,来看一下什么是titl ...

  3. 浏览器加载跟渲染html的顺序-css渲染效率的探究

    1.浏览器加载和渲染html的顺序1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都 ...

  4. js全局的解析与执行过程

    先看下面实例的执行结果: alert(a);//undefined alert(b);//报错 alert(f);//输出f函数字符串 alert(g);//undefined var a = 1; ...

  5. Enity Framework已经是.NET下最主要的ORM了

    Enity Framework已经是.NET下最主要的ORM了.而ORM从一个Mapping的概念开始,到现在已经得到了一定的升华,特别是EF等对ORM框架面向对象能力的升华.切实地说,就是ORM让数 ...

  6. mkfs---创建Linux文件系统

    [root@xiaolizi ~]# mkfsmkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs ...

  7. IDLE的自动补全功能

    IDLE的自动补全功能位于:Edit→Show Completions,但每次需要补全的时候都需要点击一次,虽然IDLE提供了一个快捷键(Ctrl + Space),但实测无效.具体操作如下图

  8. HDU 1043 八数码(A*搜索)

    在学习八数码A*搜索问题的时候须要知道下面几个点: Hash:利用康托展开进行hash 康托展开主要就是依据一个序列求这个序列是第几大的序列. A*搜索:这里的启示函数就用两点之间的曼哈顿距离进行计算 ...

  9. Dos图像复制成序列

    rem 输入1.png,在当前文件下复制.0000.png--0002.png rem 注:way2是不等待0001.png运行完就開始运行下一个了. rem 假设要等待上一个运行完后,再往下顺弃运行 ...

  10. “此文件来自其他计算机,可能被阻止以帮助保护该计算机” 教你win7解除阻止程序运行怎么操作

    win7 批量解除可执行文件的锁定 "此文件来自其他计算机,可能被阻止以帮助保护该计算机" http://blog.csdn.net/gscsnm/article/details/ ...