小程序之实现滚动加载

完整代码,片段来自码云 wallpaper 项目

<template>
  <view class="all">
    <view class="title-wire"></view>
    <scroll-view scroll-y='true' style="height:{{height}}px" bindscrolltolower='lower'>
      <view class="all-cont">
        <view class="all-list"
        wx:for="{{getAllList}}"
        wx:key="{{index}}">
          <view class="all-list-cont">
            <view class="all-list-text">{{item.text}}</view>
            <image src="{{item.imgUrl}}"/>
          </view>
        </view>
      </view>
      <view class="all-nothave" wx:if="{{isGetAllList}}">没有更多了</view>
    </scroll-view>
  </view>
</template>

<script>
export default {
  config: {
    navigationBarTitleText: "商品分类",
    disableScroll: true,
    backgroundColor: "#fff"
  },
  data: {
    // 列表
    height: '',
    allList: [
      {
        text: '1',
        imgUrl: 'http://ipyd.paixian.com/wall/banner2.png'
      },
      {
        text: '2',
        imgUrl: 'http://ipyd.paixian.com/wall/banner1.png'
      },
      {
        text: '3',
        imgUrl: 'http://ipyd.paixian.com/wall/banner3.png'
      },
      {
        text: '4',
        imgUrl: 'http://ipyd.paixian.com/wall/banner2.png'
      },
      {
        text: '5',
        imgUrl: 'http://ipyd.paixian.com/wall/banner1.png'
      },
      {
        text: '6',
        imgUrl: 'http://ipyd.paixian.com/wall/banner3.png'
      },
      {
        text: '7',
        imgUrl: 'http://ipyd.paixian.com/wall/banner2.png'
      },
      {
        text: '8',
        imgUrl: 'http://ipyd.paixian.com/wall/banner1.png'
      },
      {
        text: '9',
        imgUrl: 'http://ipyd.paixian.com/wall/banner3.png'
      },
      {
        text: '10',
        imgUrl: 'http://ipyd.paixian.com/wall/banner2.png'
      },
      {
        text: '11',
        imgUrl: 'http://ipyd.paixian.com/wall/banner1.png'
      },
      {
        text: '12',
        imgUrl: 'http://ipyd.paixian.com/wall/banner3.png'
      },
      {
        text: '13',
        imgUrl: 'http://ipyd.paixian.com/wall/banner2.png'
      }
    ],
    getAllList: [], // 模拟数据滚动加载,
    pageSize: 10, // 每页条数
    pageNo: 1, // 当前页数
    isGetAllList: false, // 是否显示没有更多了
  },
  lower() {
    // 因为是模拟数据返回的是全部,这里所以要做成分页的形式,如果是通过页数去请求接口再push就不需要这样子操作了
    if(this.data.getAllList.length < this.data.allList.length){
      wx.showLoading({  
        title: '加载中',
        icon: 'loading',
      })
    } else {
      this.setData({
        isGetAllList: true
      })
    }
    for (let i = 0; i < this.data.pageSize; i++) {
      let getAllListLength = this.data.getAllList.length
      if(this.data.getAllList.length < this.data.allList.length){
        this.data.getAllList.push(this.data.allList[getAllListLength++]);
      }
    }
    setTimeout(() => {
      this.setData({
        getAllList: this.data.getAllList
      });
      wx.hideLoading();
    }, 500)
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let _this = this
    wx.getSystemInfo({
      success: (res) => {
        let result = _this.data.allList;
        for (let i = 0; i < _this.data.pageSize; i++) {
          if(_this.data.getAllList.length < _this.data.allList.length){
            _this.data.getAllList.push(result[i])
          }
        }
        _this.setData({
          height: res.windowHeight,
          getAllList: _this.data.getAllList
        })
        // 判断展示没有更多了
        if(_this.data.getAllList.length >= _this.data.allList.length) {
          _this.setData({
            isGetAllList: true
          })
          return false
        }
      }
    })
  }
};
</script>

<style lang="less">
.title-wire{
  width: 100%;
  height: 1px;
  .mix-1px(0, 0, 1, 0, #ccc);
  position: fixed;
  z-index: 999;
}
.all {
  background: #fff;
  // 列表
  .all-cont{
      width: 100%;
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      padding: 20px 0 10px 20px;
      box-sizing: border-box;
  }
  .all-list{
    width: 50%;
    .all-list-cont{
      box-shadow: 0px 2px 4px 0px rgba(215,215,215,0.5);
      margin-right: 20px;
      margin-bottom: 20px;
      height: 120px;
      position: relative;
      overflow: hidden;
      border-radius: 2px;
    }
    .all-list-text{
      position: absolute;
      background: rgba(20, 20, 20, 0.1);
      z-index: 99;
      width: 100%;
      height: 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      text-align: center;
      margin: auto;
      color: #fff;
    }
  }
  .all-nothave{
    width: 100%;
    text-align: center;
    color:#7c7c7c;
    padding-bottom: 20px;
  }
}
</style>

 

转载于:https://my.oschina.net/lemonfive/blog/1818668

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值