小程序中瀑布流布局太棘手?这款插件不仅貌美还「能屈能伸」

小程序

2018-08-18 18:34

上个月,未来实验室的产品经理提了一个需求,要做一个可以动态缩起和展开的还要有序的瀑布流。瀑布流? 动态? 还要有序?要如何在小程序里面实现有序的瀑布流还要「能屈能伸」?也就是说,我们将实现的效果是下图这样的。

开发思路

因为小程序的诸多门槛,限制了小晓云的想象。隔壁知晓云的产品经理已经被打了,难道未来实验室的产品经理也想……?小晓云思来想去,首先想到了用纯粹的 CSS 来实现瀑布流组件。

使用新的 grid(栅格)布局?似乎没办法达成「能屈能伸」的瀑布流效果,因为 grid 布局是将页面分割成若干个主要区域,比较适用于有规则的页面布局,在这里似乎没有用武之地。

使用 flex(弹性盒子)布局?初始的效果似乎还行,但是展开缩放的时候,极端情况下会导致两列高度差过大。

用 CSS3 的新特性 multi-column (多列)布局 ? 乍一看,效果似乎不错,完美的实现了瀑布流布局,展开缩放还能自己调整两列高度。但是细细观察之后,发现事情并不简单。由于 multi-column 的本质是将文档按照顺序分成多列,如同我们杂志、报刊那样子的多栏布局,所以实际上效果(如下图)会导致我们数据展示的顺序有问题。

最后小晓云想了一个法子,通过采用 flex 布局外加上处理原数据的方式实现「能屈能伸」的有序瀑布流。BrickLayout 晓瀑布流就这样诞生了。前端通过纯粹的 CSS 的 flex 布局来实现展示,同时对使用者所传入的数据进行处理,进一步保证两列高度基本一致,从而避免出现极端的两列差距过大的情况。最终我们的瀑布流组件呈现效果如下。👇

BrickLayout 晓瀑布流为使用者提供开箱即用的瀑布流布局的一种可行性的方案,使用者仅需要按照对应所需的字段传入瀑布流组件,即可快速实现瀑布流布局。使用者可以自己定制卡片是否默认展开,卡片的背景颜色,点击卡片所触发的事件等。

目前的 BrickLayout 晓瀑布流刚刚起步,暂时只提供一种模板主题。BrickLayout 晓瀑布流设计的初衷是希望能够使使用者拥有「开箱即用」的感觉,即是可以通过少量的配置就可以完成瀑布流布局。使用者无须在关心实际的瀑布流布局实现,也无需关心前端的实际样式布局,更加专注于业务逻辑开发。未来的 BrickLayout 晓瀑布流将为使用者提供更加多样的模板主题,适用于不同场景之下的瀑布流布局。

如果你有更好的主题推荐,欢迎留言告诉我们。

BrickLayout 晓瀑布流插件使用方法

目前 BrickLayout 插件信息:

AppID:wx3c042630f3cdc175

版本号:0.1.1

具体使用方法如下:

1. 在微信小程序管理后台中,按 APPID(wx3c042630f3cdc175)或者按照名字 BrickLayout 晓瀑布流搜索到该插件,点击添加,即可在代码中使用 BrickLayout。

2. 在 app.json 中声明该插件的引入,version 表示目前该插件版本为 0.1.1,provider 为该插件的 AppID,而 BrickLayout 为自定义的插件名称。

"plugins": {
  "brickLayout": {
    "version": "0.1.1",
    "provider": "wx3c042630f3cdc175"
  }
}

3. 在需要引用瀑布流组件的小程序页面的 JSON 配置文件中,作如下配置:

{
  "usingComponents": {
    "brickLayout": "plugin://brickLayout/brickLayout"
  }
}

4. 在需要应用瀑布流组件的 WXML 里面直接使用即可。

<brickLayout
  dataSet="{{dataSet}}"  
  option="{{brick_option}}" 
  bind:tapCard="tapCard" 
  bind:tapLike="handleLike" 
  bind:tapUser="handleUserEvent"
  bind:onCardExpanded="handleExpand"
/>
 

登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中

小程序商店 minapp.com,一扫即用的小程序大全。微信公众号「知晓程序」,做中国最好的小程序报道。

本篇来自栏目

解锁订阅模式,获得更多专属优质内容