「分享」高性能双列瀑布流极简实现(附示例)

前言

在日常开发过程中,经常会有双列瀑布流场景的需求出现,如商品列表、文章列表等,本文将简单介绍这种情景下如何高效、精准的实现双列瀑布流场景,支持刷新、加载更多等,实现效果如下。

BeautifulPics 小程序
小程序截图

开发思路

瀑布流视图有一种参差的美感,常规列表布局如 flex wrap 等由于存在行高度限制,无法让第二行的 item 对齐上一行最矮处,因此,瀑布流布局时采用双列 scrollview 的 flex 布局。

参差布局的实现,采用代码计算左右两列的高度,然后对左右两列总高度进行比较,新加入的 item 总是排在总高度较小的那列后面。

计算时可以尽可能的缓存高度,例如左右两列高度在每次计算时都缓存起来,有新的 item 加入列表时直接增加左右两列高度即可,不需要重新从头计算。

index.js

const tplWidth = (750 - 24 - 8) / 2;
const tplHeight = 595; // plWidth * 1.66

newPhotos.forEach(photo => {
  const {
    height,
    width
  } = photo

  let photoHeight = tplWidth
  if (height > width) {
    photoHeight = tplHeight
    photo.display = 'long'
  } else {
    photo.display = 'short'
  }

  if (leftHeight < rightHeight) {
    leftList.push(photo)
    leftHeight += photoHeight
  } else {
    rightList.push(photo)
    rightHeight += photoHeight
  }
})

index.wxml

<!-- list -->
<view class='list'>
  <!-- left -->
  <view class='left-list'>
    <block wx:for="{{leftList}}" wx:key="{{item._id}}">
      <cell photo="{{item}}" bindclick='onCellClicked' />
    </block>
  </view>

  <!-- right -->
  <view class='right-list'>
    <block wx:for="{{rightList}}" wx:key="{{item._id}}">
      <cell photo="{{item}}" bindclick='onCellClicked' />
    </block>
  </view>
</view>

index.css

.list {
  display: flex;
  flex: 1;
  position: relative;
  flex-direction: row;
  justify-content: space-between;
  padding-left: 12rpx;
  padding-right: 12rpx;
  padding-top: 8rpx;
}

.left-list {
  display: flex;
  position: relative;
  flex-direction: column;
  width: 359rpx;
}

.right-list {
  display: flex;
  position: relative;
  flex-direction: column;
  width: 359rpx;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,093评论 1 92
  • 瀑布流布局有一个专业的英文名称Masonry Layouts。瀑布流布局已经有好多年的历史了,我最早知道这个名词的...
    无痕Q阅读 2,631评论 0 12
  • 使用纯 CSS 实现 500px 照片列表布局 文章很长,因为介绍了如何一步一步进化到最后接近完美的效果的,不想读...
    HZ充电大喵阅读 2,765评论 0 4
  • 我发誓,我要摆脱暴饮暴食,摆脱被食物控制的恐惧。 我的誓言很坚定,我以人格和生活做保。 BEC和CATTI也要考上...
    西东东_4950阅读 269评论 0 0
  • 这周五我们的第一个科技创新魔盒的知识都学完了,我来总结一下这些神奇的知识吧! 一,五彩光纤灯 1.我先背了...
    小王子WXN阅读 703评论 1 2

友情链接更多精彩内容