Infinite Masonry

将不同高度项目排列为多列,并在可见范围推进时请求更多内容。

适用场景

  • 当界面需要以下行为时使用 Infinite Masonry:将不同高度项目排列为多列,并在可见范围推进时请求更多内容。

安装

选择安装方式,用法示例将同步更新导入路径。

$ bunx --bun shadcn-vue@2.8.2 add https://orvui.efu.me/r/infinite-masonry.json

首次使用时,将安装的 src/components/orvui/styles.css 导入项目样式入口。

示例

预览

Visual index

Scroll to load the next page

12 items

状态与事件

此示例组合没有声明成对的受控属性与 update 事件。使用已列出的属性、原生事件和插槽组合内容;不要为它添加未公开的 v-model。

API 参考

items
readonly T[]
—
getItemKey
(item: T, index: number) => string | number | bigint
—
hasMore
boolean
false
onLoadMore?
() => void | Promise<void>
—
loading?
boolean
false
error?
boolean | null | string | number | void | VNode<RendererNode, RendererElement, { [key: string]: any; }> | VNodeArrayChildren | ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions> | FunctionalComponent<any, {}, any, {}> | ComponentPublicInstanceConstructor<any, any, any, any, ComputedOptions, MethodOptions>
undefined
estimateSize?
(item: T, index: number) => number
—
minColumnWidth?
number
208
maxColumns?
number
4
gap?
number
12
overscan?
number
4
prefetch?
number
3
animateItems?
boolean
true
ariaLabel?
string
"Infinite masonry feed"
contentClassName?
string
—
itemClassName?
string
—
emptyState?
boolean | null | string | number | void | VNode<RendererNode, RendererElement, { [key: string]: any; }> | VNodeArrayChildren | ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions> | FunctionalComponent<any, {}, any, {}> | ComponentPublicInstanceConstructor<any, any, any, any, ComputedOptions, MethodOptions>
—
endState?
boolean | null | string | number | void | VNode<RendererNode, RendererElement, { [key: string]: any; }> | VNodeArrayChildren | ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions> | FunctionalComponent<any, {}, any, {}> | ComponentPublicInstanceConstructor<any, any, any, any, ComputedOptions, MethodOptions>
—

事件

retry
[]
@retry

插槽

empty
() => VNodeChild
#empty
loading
—

作用域参数: index

#loading
default
—

作用域参数: item, index

#default
end
() => VNodeChild
#end

无障碍

为交互控件提供明确的无障碍名称。保留文档中的键盘路径、可见焦点与减少动态效果状态;自定义插槽应继续保留所替代部件的语义。

常见问题

如何配置 Infinite Masonry?
通过 items、getItemKey、hasMore、onLoadMore、loading、error、estimateSize、minColumnWidth、maxColumns、gap、overscan、prefetch、animateItems、ariaLabel、contentClassName、itemClassName、emptyState、endState 配置 Infinite Masonry;API 表列出其类型与默认值。
如何连接到应用状态?
监听 retry,将组件连接到应用状态。
可以在服务端渲染吗?
可以在 Vue SSR 应用中正常渲染。服务端与客户端的初始 props 应保持一致;浏览器测量与交互资源在挂载后启动。

请留意

部分组件参考了开源作品,相关署名与独立许可请参阅 NOTICE。

更新于