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

2019-10-20  本文已影响0人  Rollover

京东微信小程序瀑布流的效果:

分析结构

瀑布流可以看成是由一个个的小卡片左右分布组成

那么,电商中的瀑布流就是把一个个图片+解释说明(标题+标签+价格+详细说明)这两部分组成的一个组件,然后往它里面传数据,一个一个的渲染出来,那么我们不需要像京东的实现那么复杂,快速实现一个,效果如下:

这个组件的效果就是一个卡片

那么知道了卡片的基本布局,就先构建卡片的结构,就需要把这样的卡片写成一个组件component,当然组件中传值不一定要和我一样,看实际情况(后端返回的API)

代码如下:

// components/card/index.wxml
<view class="container">
 <!-- 图片 mode设置为自适应宽高比例,会根据图片的高度自动撑开-->
 <image mode="widthFix" class="img" src="{{data.image}}"></image>
 <!-- 图片下方作为一个整体 -->
 <view class="content-container">
 <!-- 标题 -->
 <text class="title">{{data.title}}</text>
 <!-- 价格 -->
 <view class="price-row">
 <l-price unit-size="24" size="28" color="#333333" value="{{data.count}}"></l-price>
 <l-price class="price-del" unit-size="22" size="26" deleted color="#C0C0C0" value="{{data.delCount}}"></l-price>
 </view>
 <!-- 说明 -->
 <text class="describe">{{data.describe}}</text>
 </view>
</view>

关于小程序组件的安装这里就不再赘述,这里使用到了价格组件price,在全局app.json导入:

那么卡片组件的wxss布局如下代码所示:

// components/card/index.wxss
.container {
 width: 340rpx;
 display: flex;
 flex-direction: column;
 box-shadow: 0px 0px 8px 0px rgba(119, 163, 149, 0.2);
 margin-bottom: 30rpx;
 background-color: #ffffff;
}
​
.img {
 width: 100%;
}
​
.content-container {
 display: flex;
 flex-direction: column;
 padding: 16rpx 16rpx 22rpx 16rpx; 
}
​
.title {
 font-size: 34rpx;
 color: #333333;
}
​
.price-row {
 display: flex;
 flex-direction: row;
}
​
.price-del {
 margin-left: 8rpx;
}
​
.describe {
 font-size: 32rpx;
 color: #888;
 font-weight: 300;
 margin-top: 6rpx;
}

那么,组件写好了,就要考虑传入的参数,它应该是一个Object:

// components/card/index.js
Component({
 /**
 * Component properties
 */
 properties: {
 data: Object
 },
 /**
 * Component initial data
 */
 data: {},
​
 /**
 * Component methods
 */
 methods: {
​
 },
​
})

既然组件的骨架和样式都写好了,那么我们就要在page页面中使用,这里我们使用到了一个瀑布流组件库water-flow,由于它只使用一次,所以我们在page的index.json文件中引入即可:

// "pages/home/index.json"
{
 "usingComponents": {
 "l-water-flow": "/miniprogram_npm/lin-ui/water-flow/index"
 }
}

那么卡片组件会再很多地方用到,所以我们在全局中app.json导入:

{
 "usingComponents": {
 "s-card": "./components/card/index"
 }
}

然后在page页面wxml中使用:

// "pages/home/index.wxml"
<view class="container">
 <l-water-flow generic:l-water-flow-item="s-card"/>
</view>

同时需要在js中调用:

// "pages/home/index.js"
wx.lin.renderWaterFlow(data)  // 这个data必须为一个数组对象

这时可以查看一下效果:

额,好像不太对,没有居中,那我们再设置下瀑布流的样式:

// "pages/home/index.wxss"
.container {
 margin-top: 20rpx;
 display: flex;
 flex-direction: column;
 align-items: center;
 padding-top: 30rpx;
 background-color: #ffffff;
}

再看下效果:

这效果好多了,剩下就是一些细节的调整了,下一章我们再来处理

使用组件:Lin-UI组件

上一篇下一篇

猜你喜欢

热点阅读