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

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

本文接着上一篇内容:

4.优化-添加加载动画

(1)首先写加载动画的结构和样式

打开list.wpy文件

template结构代码:

<template>
  <view class="list-wrapper">
    <!-- 滚动列表 -->
    <scroll-view scroll-y="true" style="height: 400px;" bindscrolltolower="loadMore" class="list">
      <view wx:for="{{list}}" wx:key="index" item="item" class="item">
        {{index + ‘ ‘ + item}}
      </view>
    </scroll-view>
    <!-- 加载动画结构代码 -->
    <view class="loadMoreGif" wx:if="{{loadingShow}}">
      <image src="../images/loadding.gif" />
      <text>正在加载中</text>
    </view>
  </view>
</template>

样式代码:

.loadMoreGif {
  margin: 15rpx auto;
  width: 220rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  text {
    font-size: 30rpx;
    color: #999;
    margin-left: 10rpx;
  }
  image {
    width: 30rpx;
    height: 30rpx;
  }
}

loadding.gif

(2)list.wpy js代码 data对象里添加 loadingShow: false

data = {
  // ...
  loadingShow: false
}

加载动画默认是隐藏的。当鼠标滑到列表底部,触发加载数据的时候,让加载动画显示,数据加载完成后让加载动画隐藏。

list.wpy js代码 loadMore方法里面:

loadMore() {
  console.log(‘页数:‘, this.currentPage)
  // 开启加载动画
  this.loadingShow = true
  this.currentPage++
  setTimeout(() => {
    // 模拟数据
    this.listSlice(this.currentPage)
    // 模拟异步时差,3秒后关闭加载动画
    this.loadingShow = false
    // 记得重载dom,否则无效哦
    this.$apply()
  }, 3000);
}

最终效果:

实际项目中,数据异步请求,要防止重复请求。这里无法模拟异步请求的场景,就不写了。

5.优化-暂无数据

数据缺省有两种情况,一种是列表内容为空,另一种是列表上拉加载时没有更多数据。

(1)列表为空时的条件渲染

打开list.wpy,template部分代码:

<template>
  <view class="list-wrapper">
    <view wx:if="{{list.length}}">
      <!-- 滚动列表 -->
      <scroll-view scroll-y="true" style="height: 400px;" bindscrolltolower="loadMore" class="list">
        <view wx:for="{{list}}" wx:key="index" item="item" class="item">
          {{index + ‘ ‘ + item}}
        </view>
      </scroll-view>
      <!-- 加载动画结构代码 -->
      <view class="loadMoreGif" wx:if="{{loadingShow}}">
        <image src="../images/loadding.gif" />
        <text>正在加载中</text>
      </view>
    </view>
    <!-- 没有列表数据时的渲染条件 -->
    <view wx:else class="listNone">
      <view><image src="../images/item-empty.png" /></view>
      <text>暂无数据</text>
    </view>
  </view>
</template>

给scroll-view滚动列表和加载动画等内容外面包了一层容器,列表为空时这些都不用显示,走wx:else

css样式代码:

.listNone {
  position: fixed;
  top: 30%;
  left: 50%;
  transform: translate(-50%, -50%);
  text-align: center;
  color: #999;
  image {
    width: 212rpx;
    height: 312rpx;
    margin-bottom: 20rpx;
  }
}

这里为了演示没有数据的效果,我把onLoad()里面的代码都注释掉了

onLoad() {
  // const listChunk = listData.slice(0, 8)
  // if (!listChunk.length) {
  //   this.noDataShow = true
  // } else {
  //   this.list = listChunk
  // }
}

npm run dev 打开微信开发者工具预览:

(2)上拉加载时没有更多数据

list.wpy template部分代码修改:

在scroll-view标签里面追加代码

<view class="nodata" wx:if="{{noDataShow}}">没有更多数据</view>

css代码如下:

.nodata {
  text-align: center;
  color: #999;
  line-height: 48rpx;
  margin: 30rpx 10rpx;
  font-size: 28rpx;
}

在js代码 data对象里添加 noDataShow: false

默认不显示,在加载数据后显示

  listSlice (cur) {
    // let start = (cur - 1) * this.pageSize
    // let end = cur * this.pageSize
    // let listChunk = listData.slice(start, end)
    let listChunk = []
    if (!listChunk.length) {
      // 没有数据时显示“没有更多数据”
      this.noDataShow = true
    } else {
      this.list = [...this.list, ...listChunk]
      this.noDataShow = false
    }
  }

为了演示没有更多数据的效果,把数据的代码注释掉了。

最终效果如下:

本篇完

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

时间: 2024-10-02 10:02:14

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

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

使用wepy开发微信小程序商城第一篇:项目初始化 使用wepy开发微信小程序商城第二篇:路由配置和页面结构 列表页效果图: 1.新建列表页 (1)在pages里面新建一个list.wpy文件 初始代码结构如下: <style lang="less"> </style> <template> <view> </view> </template> <script> import wepy from 'wep

微信小程序-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