Skip to content

Waterfall 瀑布流

适合图文卡片流、内容社区、商品种草流等双列不等高内容布局。组件内置双列贪心布局、骨架屏、图片预计算与滚动加载能力。

基础用法

vue
<script setup lang="ts">
const items = [
  { id: 1, image: 'https://img01.yzcdn.cn/vant/cat.jpeg', ratio: 1.3, title: '卡片 1' },
  { id: 2, image: 'https://img01.yzcdn.cn/vant/cat.jpeg', ratio: 0.8, title: '卡片 2' },
]
</script>

<template>
  <lk-waterfall :items="items" height="100vh" />
</template>

自定义卡片模板

默认通过 item 作用域插槽渲染单卡内容。

vue
<lk-waterfall :items="items" :card-radius="20">
  <template #item="{ item, loading, onImageLoad, onImageError }">
    <view style="background:#fff;border-radius:20rpx;overflow:hidden">
      <image
        :src="item.image"
        mode="aspectFill"
        style="width:100%;height:300rpx"
        @load="onImageLoad()"
        @error="onImageError()"
      />
      <view style="padding:24rpx">
        <view style="font-size:28rpx;font-weight:600">{{ item.title }}</view>
        <view v-if="loading" style="margin-top:12rpx;color:#999">图片加载中...</view>
      </view>
    </view>
  </template>
</lk-waterfall>

无限加载

vue
<lk-waterfall
  :items="list"
  :lower-threshold="200"
  :preload-screens="2"
  @load-more="loadMore"
  @reach-bottom="loadMore"
/>

图片预计算与骨架屏

vue
<lk-waterfall
  :items="list"
  :show-skeleton="true"
  :preload-image="true"
  :default-extra-height="56"
/>

如果业务数据能提前提供 ratioimageWidthimageHeight,瀑布流布局会更稳定。

推荐示例

1) 直接复用项目 Demo(推荐)

vue
<script setup lang="ts">
import WaterfallDemo from '@/components/demos/waterfall-demo.vue'
</script>

<template>
  <WaterfallDemo />
</template>

2) 在业务页中按需组合

vue
<template>
  <view class="page-demo">
    <lk-waterfall />
  </view>
</template>

API

Props

参数说明类型默认值
items瀑布流数据WaterfallItem[][]
height容器高度string | number'100vh'
gutter列间距string | number16
rowGap行间距string | number16
paddingX左右内边距string | number16
paddingY上下内边距string | number16
defaultExtraHeight默认卡片额外高度number60
estimateHeight无法预估时使用的兜底高度number200
imageLoadTimeout图片加载超时,单位 msnumber5000
lowerThreshold触底阈值number200
preloadScreens预加载屏数number2
showSkeleton是否显示初始骨架屏booleantrue
preloadImage是否启用图片高度预计算booleantrue
errorPlaceholder图片失败占位图string''
cardRadius卡片圆角string | number16
scrollWithAnimation是否启用滚动动画booleanfalse
bounces是否启用回弹效果booleantrue
enhanced小程序增强模式booleantrue
showScrollbar是否显示滚动条booleanfalse

WaterfallItem

字段说明类型
id唯一标识string | number
image图片地址string
imageWidth图片原始宽度number
imageHeight图片原始高度number
ratio图片宽高比,高于 imageWidth/imageHeight 优先级number
extraHeight卡片底部额外高度number

Events

事件名说明回调参数
scroll滚动时触发({ scrollTop, scrollHeight })
reach-bottom滚动到列表底部()
load-more需要加载更多数据时触发()
card-click点击某一张卡片(item, index)
image-loaded某卡片图片加载完成(item, index)
image-error某卡片图片加载失败(item, index)

Slots

插槽名说明
header列表顶部内容
item自定义卡片内容,作用域参数为 { item, index, width, height, loading, image-state, on-image-load, on-image-error }
loading底部加载中区域

使用建议

TIP

推荐在数据中提前提供 ratio,这样组件无需等待图片真实加载完成也能更早计算布局,滚动体验会更稳定。

发布验收

lk-waterfall 已纳入 high-risk showcase 回归,发布前按下面边界验收:

场景验收方式要点
展示台基线自动回归tests/visual/high-risk-showcase.spec.ts 校验组件路由、verified 状态与高风险标记
图片加载人工验收ratio、无 ratio、加载失败三类数据下列高稳定
滚动加载人工验收reach-bottom/load-more 不重复触发,新增数据后列顺序不抖动

WARNING

瀑布流列高依赖图片加载节奏。公开示例建议业务数据提前提供 ratio,否则不同网络和 WebView 下可能出现首屏重排。

基于 MIT 协议开源 · 粤ICP备2022114240号-3

Waterfall 瀑布流

正在连接预览服务...

请先运行 pnpm run dev:h5