1. 程式人生 > >微信小程序 瀑布流布局

微信小程序 瀑布流布局

ear size -m mil item medium app fan height

今天做小程序的時候,碰到一個比較常見的需求,就是要瀑布流布局,兩列,交錯分布,大概如下圖

技術分享

最終要實現的結果就是如左圖所示。

不過在微信小程序裏面,不能通過JavaScript來直接操作dome,所以一些常用的方法在這裏都沒有辦法用了。這讓筆者非常著急,因為項目比較趕,不能因為這種低級的布局問題拖慢了進度。

百度了半天,發現了css3的column這個屬性,但是最後實現出來的方法就如右圖所示,這不符合需求,需求是兩列,從左到右進行排列的,大概就像小紅書APP那種瀑布流布局

技術分享

最後筆者終於找到一種非常詭異的方法,哈哈,廢話不多說,直接上代碼

<view class="content"
> <view class="left"> <block wx:for="{{note}}" wx:key=""> <template is="item" data="{{...item}}" wx:if="{{index%2==0}}"></template> </block> </view> <view class="right"> <block wx:for="{{note}}" wx:key=""
> <template is="item" data="{{...item}}" wx:if="{{index%2==1}}"></template> </block> </view> </view><!-- 下面是一個模塊 --> <template name="item"> <view class="item"> <image class="item-img" src="{{url}}" mode="widthFix"
></image> <view class="item-title-box"> <navigator url="url" class="item-title">{{title}}</navigator> <image class="arrow" src="../../image/arrow.png"></image> </view> <view class="name"> <image class="item-ava" src="{{avatar}}"></image> <text class="name-title">{{name}}</text> <view class="heart_"> <image class="heart" src="../../image/heart.png"></image> <text>{{heart_num}}</text> </view> </view> </view> </template>

CSS樣式

.content{
  margin: 0 20rpx;
  text-align: justify; 
}  
.item{
  background-color: #fff;
  margin: 1%; 
  margin-bottom: 20rpx;
  display: inline-block;
}
.item-ava{
  width: 40rpx;
  height: 40rpx;
  border-radius: 20rpx;
}
.heart{
  width: 30rpx;
  height: 26rpx;
  margin-right: 8rpx;
}
.heart_{
  display: flex;
  align-items: center;
}
.item-img{
  width: 100%
  
}
.item-title{
  font-size: 24rpx;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  overflow: hidden;
  font-family: ‘PingFang SC-Medium‘;
  color: #1e1e1e;
  margin: 15rpx;
  line-height: 27rpx;
}
.item .name{
  display: flex;
  padding: 0 15rpx;
  margin-top: 20rpx;
  padding-bottom: 10rpx;
  align-items: center;
  font-size: 22rpx;
  color: #1e1e1e;
  font-family: ‘PingFang SC-Medium‘;
}
.name image{
  flex: 0 0 30rpx;
}
.item-title-box{
  display: flex;
  position: relative;
}
.name-title{
  flex: 1;
  margin-left: 18rpx;
  margin-right: 20rpx;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  overflow: hidden;
}
.name text:last-child{
  flex: 0 0 30rpx;
  color: #c4c4c4;
  text-decoration: underline;
  line-height: 10rpx;
  
}
.left,.right{
  display: inline-block;
  vertical-align: top;
  width: 49%;
}
.right{
  float: right;
}

js數據

var app = getApp()
Page({
  data: {
    note:[
      {
        name: ‘大臉貓愛吃魚大臉貓愛吃魚大臉貓愛吃魚大臉貓愛吃魚大臉貓愛吃魚‘,
        heart_num: ‘1‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://f10.baidu.com/it/u=121654667,1482133440&fm=72‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      },
      {
        name: ‘大臉貓愛吃魚‘,
        heart_num: ‘2‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      },
      {
        name: ‘大臉貓愛吃魚‘,
        heart_num: ‘3‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      }, {
        name: ‘大臉貓愛吃魚‘,
        heart_num: ‘4‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://f10.baidu.com/it/u=121654667,1482133440&fm=72‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      },
      {
        name: ‘大臉貓愛吃魚‘,
        heart_num: ‘5‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://f10.baidu.com/it/u=121654667,1482133440&fm=72‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      },
      {
        name: ‘大臉貓愛吃魚‘,
        heart_num: ‘6‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      },
      {
        name: ‘大臉貓愛吃魚‘,
        heart_num: ‘7‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://img4.imgtn.bdimg.com/it/u=2748975304,2710656664&fm=26&gp=0.jpg‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      }, {
        name: ‘大臉貓愛吃魚‘,
        heart_num: ‘8‘,
        title: ‘你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識你所不知道的紅酒知識‘,
        url: ‘http://img2.imgtn.bdimg.com/it/u=1561660534,130168102&fm=26&gp=0.jpg‘,
        avatar: ‘http://img4.imgtn.bdimg.com/it/u=349345436,3394162868&fm=26&gp=0.jpg‘
      }
    ]}
})

最後出來的效果

技術分享

哈哈,大概的思路就是,直接定義兩列等寬的view,然後兩列都加載相同的數據

敲黑板!!!記重點啦!!! wx:if="{{index%2==1}}" 這裏,用if來辨別是奇數還是偶數,兩邊加載相反的,哈哈,這樣就成功實現瀑布流了,是不是很簡單?

微信小程序 瀑布流布局