美文网首页
微信小程序实现瀑布流布局

微信小程序实现瀑布流布局

作者: 清风昙 | 来源:发表于2022-03-26 21:43 被阅读0次

微信小程序实现瀑布流布局,效果如下:


waterFlow.png

index.js

import {firstData, pushData} from "./waterFlowMock.js"
Page({

  /**
   * 页面的初始数据
   */
  data: {
    firstData, //初始数据
    pushData, // 加载数据
    pageIndex: 1, // 当前页数
    pageTotal: 1, // 最大页数
    reachBottom: false,
    listData: []
  },

  // 下拉刷新
  refresh() {
    this.setData({
      pageIndex: 1,
      pageTotal: 1
    })
    this.getAppList(false);
  },

  // 获取列表
  async getAppList(status) {
    // 上拉加载pageIndex += 1
    let pageIndex = this.data.pageIndex;
    if (status) {
      pageIndex += 1;
    }
    // 当前页数大于最大页数不执行后续
    if (pageIndex > this.data.pageTotal) {
      this.setData({
        reachBottom: true
      })
      return
    }
    wx.showLoading({
      mask: true,
      title: '加载中'
    })
    // const res = {
    //   method: 'post',
    //   data: {
    //     pageIndex,
    //   },
    //   url: indexApi.getAppList()
    // };
    // const returnValue = await request(res);
    // 下拉刷新直接赋值,上拉加载合并数组(调用接口使用)
    // let newArray = status ? this.data.listData.concat(returnValue.records) : returnValue.records;
    // 模拟添加数据(调用接口可注掉)
    let newArray = this.data.firstData;
    if(status) {
      newArray = this.data.listData.concat(this.data.pushData);
    }
    this.setData({
      pageIndex, //更新页数
      listData: newArray,
      pageTotal: 2
      // pageTotal: returnValue.pages
    })
    // 模拟延迟2秒(调用接口可去掉settiemout)
    setTimeout(() => {
      // 取消loading等待
      wx.hideLoading();
      // 通知页面停止下拉刷新效果
      wx.stopPullDownRefresh();
    }, 2000);
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.getAppList(false);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: async function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: async function () {
    this.refresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    this.getAppList(true);
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

index.wxml

<view>
  <view class="container">
    <view class="picture">
      <block wx:for="{{ listData }}"
        wx:key="index">
        <view class="item" >
          <view>
            <image 
              lazy-load
              mode="widthFix"
              src="{{ item.funcPhoto }}" />
          </view>
          <view class="text-center">{{ item.remark }}</view>
        </view>
        <view class="null-wrap"></view>
      </block>
    </view>
    <!-- 空列表提示 -->
    <view 
      wx:if="{{ listData.length == 0 }}" 
      class="flex flex-column flex-items-center">
      <image class="data-img"
        lazy-load
        mode="widthFix"
        src="/images/no-result.png" />
        <view>还没有数据哦~</view>
    </view>
    <!-- 置底了 -->
    <view 
      wx:if="{{ reachBottom }}"
      class="flex flex-center">
      ~ 到底啦 ~
    </view>
  </view>
</view>

index.wxss


/* 全局内边距 */
.container {
  padding: 0 20rpx;
}
/* 瀑布流布局 */
.picture{
  column-gap: 5rpx;
  column-count: 2;
  margin: 20rpx 0;
}
.item {
  width: calc(100% - 30rpx);
  break-inside: avoid;
  box-shadow: 0 5px 15px 0 rgba(0,0,0,0.1);
  border-radius: 10rpx;
  margin: 0 15rpx;
}
.item image {
  width: 100%;
}
.null-wrap{
  height: 30rpx;
}
.data-img{
  width: 300rpx;
  height: 300rpx;
}

waterFlow.js

// 静态模拟数据
const firstData = [
  {
    remark: "图片1",
    id: "62",
    funcPhoto: "/images/electronic.png"
  },
  {
    remark: "图片2",
    id: "63",
    funcPhoto: "/images/logo.png"
  },
  {
    remark: "图片3",
    id: "64",
    funcPhoto: "/images/default_img.png"
  },
  {
    remark: "图片4",
    id: "65",
    funcPhoto: "/images/no-result.png"
  },
  {
    remark: "图片5",
    id: "66",
    funcPhoto: "/images/default_img.png"
  },
  {
    remark: "图片6",
    id: "62",
    funcPhoto: "/images/logo.png"
  },
  {
    remark: "图片7",
    id: "63",
    funcPhoto: "/images/logo.png"
  },
  {
    remark: "图片8",
    id: "64",
    funcPhoto: "/images/logo.png"
  },
  {
    remark: "图片9",
    id: "65",
    funcPhoto: "/images/no-result.png"
  },
  {
    remark: "图片10",
    id: "66",
    funcPhoto: "/images/end.png"
  },
  {
    remark: "图片11",
    id: "65",
    funcPhoto: "/images/location.png"
  }
]

// 加载数据
const pushData = [
  {
    remark: "图片11",
    id: "66",
    funcPhoto: "/images/logo.png"
  },
  {
    remark: "图片12",
    id: "65",
    funcPhoto: "/images/no-result.png"
  },
]

 
export {
  pushData,
  firstData
}

相关文章

  • 微信小程序实现瀑布流布局

    微信小程序实现瀑布流布局,效果如下: index.js index.wxml index.wxss waterFl...

  • 瀑布流布局 的学习

    1- 实现瀑布流布局效果 瀑布流效果瀑布流代码木桶布局效果木桶布局代码瀑布流布局 2- 实现一个新闻瀑布流新闻...

  • 微信小程序实现瀑布流布局

    小程序实现瀑布流 近期在做APP转成小程序的相关开发,需将APP里面的部分页面抽离出来,做成小程序。其中有个页面是...

  • 瀑布流布局_木桶布局

    题目1: 实现一个瀑布流布局效果 瀑布流 题目2:实现木桶布局效果 木桶布局 题目3:**实现一个新闻瀑布流新闻网...

  • 微信原生组件|基于小程序实现音视频通话

    1 微信小程序原生推拉流组件功能简介 本文将介绍如何使用微信小程序原生推拉流组件 和 进行推拉流,快速实现...

  • 瀑布流布局

    题目1: 实现一个瀑布流布局效果瀑布流代码题目2:实现木桶布局效果木桶布局代码题目3:实现一个新闻瀑布流新闻网站,...

  • 微信小程序实现瀑布流布局(一)

    京东微信小程序瀑布流的效果: 分析结构 瀑布流可以看成是由一个个的小卡片左右分布组成 1.图片 2.标签(有些有)...

  • 瀑布流和懒加载结合

    实现一个瀑布流布局效果 瀑布流

  • 小程序的Flex弹性布局

    参考:微信小程序页面布局微信小程序开发详解(九)---微信小程序布局基础 1.Flex布局的特点 1.任意方向的伸...

  • 微信小程序瀑布流列表

    小程序的瀑布流列表,如果是两列,把屏幕分为2列,左边一列,右边一列。 在wxss里面,定义各个view的位置。

网友评论

      本文标题:微信小程序实现瀑布流布局

      本文链接:https://www.haomeiwen.com/subject/oqxujrtx.html