微信小程序-第四天

如何实现瀑布流?

wxml代码:分成左右两个盒子

<view class="box">
  <view class="left" >
    <image wx:for="{{leftList}}" bindtap="toChatDetail" data-id="{{item.postsId}}"  mode="widthFix" src="{{item.coverImgUrl}}"></image>
  </view>
  <view class="right" >
    <image wx:for="{{rightList}}" bindtap="toChatDetail" data-id="{{item.postsId}}" mode="widthFix" src="{{item.coverImgUrl}}"></image>
  </view>
</view>

wxss代码:样式

.van-button--normal{
  width: 100%;
  padding: 0!important;
}
.myImg{
  margin:10px 0;
  width: 70px;
  height: 70px;
  border-radius: 50%;
}
.txtBox{
  display: flex;
  padding: 5px 10px;
  border-bottom: 1px solid #f0f0f0;
}
.myInfoIitle{
  width: 20%;
}
.txt{
  margin-left: 40px;
  font-size: 14px;
  color: gray;
}

js代码:切割数组,使用递归方法拼接

 data: {
    leftList:[],
    rightList:[],
    leftHeight:0,
    rightHeight:0,
    // 整体数据是否完成
    finish:false,
    isEnd:false,
    flag:true
  },
  pageNum:1,
  pageSize:10,
  initList(list){
    this.data.finish=false
    if(list.length==0){
      this.data.finish=true
      return
    }
    let item = list.shift()
    wx.getImageInfo({
      src: item.coverImgUrl,
      success:(res)=>{
        if(this.data.leftHeight<=this.data.rightHeight){
          // 放到左边列表
          this.data.leftList.push(item)
          // 记录高度变化
          this.data.leftHeight += res.height/res.width 
        }else{
          // 放到右边列表
          this.data.rightList.push(item)
          // 记录高度变化
          this.data.rightHeight += res.height/res.width 
        }
        // 更改视图
        this.setData({
          leftList:this.data.leftList,
          rightList:this.data.rightList,
        })
      },
      complete:()=>{
        this.initList(list)
      }
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 请求论坛列表接口
    getPostsList(this.pageNum,this.pageSize).then(res=>{
      console.log(res.data.rows);
      // 处理数据
      this.initList(res.data.rows)
    })
  },

用户上拉刷新和触底刷新

/**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.data.isEnd = false
    if(this.data.finish){
      this.setData({
        leftList:[],
        rightList:[],
        leftHeight:0,
        rightHeight:0
      })
      getPostsList().then(res=>{
        // 处理数据
        this.initList(res.data.rows)
     })
    }else{
      return
    }
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    console.log("触底了");
    this.data.flag=true
    if(this.data.finish){
      if(!this.data.isEnd){
        this.pageNum++
        getPostsList(this.pageNum, this.pageSize).then(res => {
          // 如果加载到最后一页
          if (this.pageNum*this.pageSize >= res.data.total) {
            console.log("最后一页");
            // 处理数据
            this.initList(res.data.rows)
            this.setData({
              isEnd: true,
              flag:false
            })
          } else {
            // 处理数据
            this.initList(res.data.rows)
          }
        })
      }

    }
  },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值