使用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. js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable

    js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable 一.总结 一句话总结:bootstrap能够做为最火的框架,绝对不仅仅只有我看到的位置,它应该还有很多位置可 ...

  2. 9.Java通过axis调用WebService

    转自:https://www.cnblogs.com/fu-yun/p/4553685.html 包含:axis.jar,commons-discovery.jar,commons-logging-1 ...

  3. java体系学习

    前端部分: 1)HTML:网页的核心语言,构成网页的基础 2)CSS:使网页更加丰富多彩灿烂的利器 3)JavaScript:使网页动起来的根本,加强了网页和用户之间的交互 4)HTML DOM:换一 ...

  4. PHP生成二维码方法

    <?php //先下载一份phpqrcode类,下载地址http://down.51cto.com/data/780947require_once("phpqrcode/phpqrco ...

  5. mycat 不得不说的缘分(转)

    ,尾声,左兄与任正非.leader-us与马云 新成立的公司里面,有个左兄,很传奇,大一在大学入伍,然后复员专业,来上海学IT,年纪轻轻,睡在地铁站,苦心专研数据库.系统.中间件,现在已经成为了业界大 ...

  6. Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory(转)

    1. Spring整合MyBatis切换SqlSessionFactory有两种方法,第一. 继承SqlSessionDaoSupport,重写获取SqlSessionFactory的方法.第二.继承 ...

  7. PatentTips - Control register access virtualization performance improvement

    BACKGROUND OF THE INVENTION A conventional virtual-machine monitor (VMM) typically runs on a compute ...

  8. 25.C++多线程

    #include <iostream> #include <thread> #include <Windows.h> using namespace std; vo ...

  9. 洛谷 P1287 盒子与球

    P1287 盒子与球 题目描述 现有r个互不相同的盒子和n个互不相同的球,要将这n个球放入r个盒子中,且不允许有空盒子.问有多少种方法? 例如:有2个不同的盒子(分别编为1号和2号)和3个不同的球(分 ...

  10. 洛谷 P2067 Cytus-Holyknight

    P2067 Cytus-Holyknight 题目背景 本人最初作 以此纪念伟大的ios.安卓.PSV平台音乐游戏<cytus> 后续将不断更新. -------------Chapter ...