zoukankan      html  css  js  c++  java
  • 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
        }
      }

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

    最终效果如下:

    本篇完

  • 相关阅读:
    C# WinForms多线程编程-摇奖程序
    C#多线程编程实例介绍
    C#多线程编程(1) —— 多线程与UI操作
    C#引用类型与值类型浅析
    HTML中空格占位符的几种方式
    C#中字符串排序的问题和解决方法
    InstanceContextMode和ConcurrencyMode的默认值
    The "IsFileSystemCaseSensitive" parameter is not supported by the "FindConfigFiles" task
    jQuery中delegate() 和 on()的出现版本
    NHibernate 分页优化,针对SQLServer(未深入测试)
  • 原文地址:https://www.cnblogs.com/cathy1024/p/10330018.html
Copyright © 2011-2022 走看看