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

使用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.优化-添加加载动画

(未完待续...)

原文地址:https://www.cnblogs.com/basic0001/p/10319880.html

时间: 2024-11-07 15:57:32

wepy小程序实现列表分页上拉加载(1)的相关文章

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

第一篇:wepy小程序实现列表分页上拉加载(1) 本文接着上一篇内容: 4.优化-添加加载动画 (1)首先写加载动画的结构和样式 打开list.wpy文件 template结构代码: <template> <view class="list-wrapper"> <!-- 滚动列表 --> <scroll-view scroll-y="true" style="height: 400px;" bindscr

微信小程序-scroll-view横向滚动和上拉加载

今天介绍微信小程序中scroll-view实现横向滚动和上拉加载的实现及需要注意的地方. 先看最终效果. 横向滚动 1.设置滚动项display:inline-block; 2.设置滚动视图容器white-space: nowrap; 3.滚动项不要用float 为什么会有以上三点要求呢? 其实横向滚动官方文档中是没有做太多说明的,只说明需要定义scroll-view滚动方向scroll-x=true允许横向滚动,但是我在实践的时候我发现,你要横向滚动,首先你得是一排吧.所以才发现需要定义滚动项

小程序_上拉加载更多

小程序有两种上拉加载更多的分页效果. 第一种利用onReachBottom函数 1 onReachBottom: function() { 2 3 // Do something when page reach bottom. 4 5 } 第二种使用scroll-view标签,这个标签需要给定一定的高度才能实现,同时还需要设置scroll-y为true,再在bindscrolltolower滚动到底部触发事件. 代码: wxml <!-- 主容器 --> <view> <sc

微信小程序上拉加载和下拉刷新(wepy)

这篇随笔主要是记录在用wepy写小程序下拉刷新和上拉加载功能时遇到的数据显示不完全的问题及解决方法. 网上很多关于小程序的上拉加载和下拉刷新的文章的实现方法,无非两种,一是用scroll-view组件,另一种则是使用onReachBottom()和onPullDownRefresh()两个页面事件处理函数. scroll-view实现不好的是不能使用onPullDownRefresh,只能检测滚动到顶部触发刷新或者其它动画操作,以及在其内部使用textarea.map.canvas.video等

微信小程序页面事件-下拉刷新,上拉加载更多

1.下拉刷新的概念及应用场景. 概念: 下拉刷新是移动端更新列表数据的交互行为,用户通过手指在屏幕上子上而下的滑动,可以触发页面的下拉刷新,更新列表数据. 应用场景: 在移动端,数据列表是常见的页面效果,更新列表数据是最基本的页面需求,相比于按钮刷新,定时刷新来说,下拉刷新的用户体验方便友好,已经成为移动端刷新列表数据的最佳解决方案. 微信小程序启动下拉刷新: 两种方式: 1.需要在app.json 的window选项中或页面配置中开启enablePullDownRefresh, 但是,一般情况

微信小程序 下拉刷新 上拉加载

1.下拉刷新  小程序页面集成了下拉功能,并提供了接口,我们只需要一些配置就可以拿到事件的回调. 1. 需要在 .json 文件中配置. 如果配置在app.json文件中,那么整个程序都可以下拉刷新.如果写在具体页面的.json文件中,那么就是对应的页面,可以下拉刷新. 具体页面的.json文件: 1 { 2 "enablePullDownRefresh": true 3 } app.json文件: 1 "window": { 2 "enablePullD

微信小程序上拉加载更多

一般上拉加载更多用于数据太多,一次加载完成数据卡顿,差不多就是一个分页的功能, 写法很简单,首页data数据中先定义一个page为1,第一次进入页面调用接口将为1的page传给后台,随后在小程序自带的onReachBottom函数中操作 onReachBottom: function () { var that = this; console.log(that) var page = that.data.page page++; that.setData({ page: page }) // 显

微信小程序上拉加载下拉刷新

微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载的动画可能会是白色背景,会看不清. { "usingComponents": { "annicate": "/components/annicate/index" }, "navigationBarTitleText": &quo

微信小程序上拉加载:onReachBottom详解+设置触发距离

前端经常遇到上拉加载更多的需求,一般还涉及到翻页.小程序里已经给了下拉到底的触发方法onReachBottom(),这里记录下怎样使用这个方法实现下拉加载更多,有需要的直接看代码,有详细注释: 1.首先在data里定义一下返回数据data,和翻页的页数pagenum data: { datalist: [], //.wxml文件需要绑定的列表,我这里用的数据类型是数组 pagenum: 1, //初始页默认值为1 }, 2.具体的请求过程,包含新老数据的数组合并,实现数据实时更新 getdata