更新记录

1.0.0(2026-06-24) 下载此版本

1.0.0

  • 首次发布 w-waterfall 瀑布流组件。
  • 支持按真实列高自动分发与奇偶分列两种模式。
  • 支持虚拟列表渲染能力、性能拉满。
  • 支持列表追加、手动重排、列间距、行间距和外边距配置。
  • 支持 fade-up、fade、zoom、none 四种入场动画配置。
  • 支持通过 keyField 指定唯一字段,兼容点号路径如 goods.id。

平台兼容性

uni-app(3.7.12)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- -

其他

多语言 暗黑模式 宽屏模式
× ×

ws-waterfall 瀑布流组件

ws-waterfall 是一个适用于 uni-app Vue3 的双列瀑布流组件。组件支持按真实列高自动分发,也支持奇偶分列;适合商品卡片、图片流、内容流等高度不固定的列表场景。

使用方式

插件导入后可通过 easycom 直接使用:

<template>
  <ws-waterfall
    ref="waterfallRef"
    :list="goodsList"
    key-field="goods.id"
    :column-gap="16"
    :row-gap="16"
    :padding="0"
    mode="auto"
    @layout-done="onLayoutDone"
  >
    <template #default="{ item, index, column }">
      <view class="goods-card">
        <image class="goods-card__image" :src="item.image" mode="widthFix" @load="waterfallRef?.reflow()" />
        <view class="goods-card__title">{{ item.title }}</view>
      </view>
    </template>
  </ws-waterfall>
</template>

<script setup lang="ts">
const waterfallRef = ref()

const goodsList = ref([
  {
    goods: { id: 1 },
    image: "/static/demo/goods-1.png",
    title: "商品标题"
  }
])

const onLayoutDone = () => {
  console.log("waterfall layout done")
}
</script>

虚拟列表

大数据量列表可开启虚拟渲染:

<ws-waterfall
  ref="waterfallRef"
  :list="goodsList"
  virtual
  :estimated-item-height="360"
  :overscan="800"
  key-field="goods.id"
>
  <template #default="{ item }">
    <goods-card :item="item" @image-load="waterfallRef?.reflow()" />
  </template>
</ws-waterfall>

虚拟模式基于页面滚动,不会创建内部 scroll-view。未测量卡片会先按 estimatedItemHeight 预估高度,可见卡片渲染后自动回填真实高度;图片异步加载导致高度变化时,建议调用 reflow()

Props

参数 类型 默认值 说明
list Array [] 数据源,列表追加时会自动入队并分发到更矮的列
keyField string | Function id 唯一字段,支持点号路径,如 goods.id
columnGap number 16 列间距,单位 rpx
rowGap number 16 行间距,单位 rpx
padding number 0 左右两侧外边距,单位 rpx
mode auto | split auto auto 按真实列高分发;split 按左右列数量分发
delay number 0 非虚拟 auto 模式下每项之间的最小分发间隔,单位 ms
enterAnimation fade-up | fade | zoom | none fade-up 新入列项进入动画;虚拟模式下会自动关闭,避免和定位冲突
enterDuration number 360 进入动画时长,单位 ms
virtual boolean false 是否开启虚拟列表渲染
estimatedItemHeight number 320 虚拟模式下未测量卡片的预估高度,单位 rpx
overscan number 600 虚拟模式下可视区域上下额外渲染缓冲,单位 rpx
viewportHeight number 系统窗口高度 虚拟模式下可视区域高度,单位 px

Events

事件名 说明
layout-done 一轮分发结束、内部队列清空后触发

Slots

插槽 参数 说明
default { item, index, column } 自定义每个瀑布流卡片内容

Expose

方法 说明
reflow 手动重排。图片异步加载导致高度变化时可调用

注意事项

  • 当前组件使用 Vue3 <script setup>,适用于 uni-app Vue3 项目。
  • auto 模式依赖 uni.createSelectorQuery() 测量列高,图片高度异步变化时建议在图片 load 后调用 reflow()
  • 虚拟模式适合大量数据列表,小数据列表可继续使用默认非虚拟模式。
  • 组件不包含广告、不采集数据、不申请系统权限。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。