OverflowList

溢出折叠列表,严格镜像 Semi OverflowList。行为组件:展示列表并自适应展示尽可能多的项目,因过长而溢出的项折叠为一个元素,容器 resize 时重新计算可见项。renderMode="collapse"(默认)用 ResizeObserver 累加各项宽度找折叠点,溢出项收纳进 overflowRenderer 返回的节点,collapseFrom 决定从尾(end)/头(start)折叠,minVisibleItems 保底可见数;renderMode="scroll" 不折叠,可见层为可横向滚动容器,用 IntersectionObserver 观测各项,threshold 控制阈值,onIntersect/onVisibleStateChange 上报可见状态。渲染函数以 Svelte Snippet 形式提供(visibleItemRenderer/overflowRenderer)。

设计文档

如何引入

import { OverflowList } from '@chenzy-design/svelte';

折叠模式(默认)

renderMode="collapse":容器放不下时把溢出项收纳为 +N

拖动滑块改变容器宽度,溢出标签自动折叠进 +N

折叠方向

collapseFrom="start" 从头部折叠,尾部项保持可见

collapseFrom="start":折叠节点渲染在头部,尾部最新项保持可见

最小展示数目

minVisibleItems 保证至少展示 N 个可见项

minVisibleItems={3}:即使容器很窄也至少保留 3 个可见项

滚动模式

renderMode="scroll" 不折叠,容器内横向滚动查看溢出项

renderMode="scroll":不折叠,容器内横向滚动查看溢出项;两端显示已隐藏计数

alarm
bookmark
camera
duration
edit
folder

溢出回调

onOverflow 上报当前被折叠的项集合(去重)

onOverflow 上报当前被折叠的项;缩小容器观察折叠项列表变化

已折叠:(无)

自定义折叠节点

overflowRenderer 返回下拉菜单,点击 +N 展开被折叠项

overflowRenderer 返回下拉菜单:点击 +N 展开被折叠的项

滚动相交回调

scroll 模式下 onVisibleStateChange + threshold 上报可见项

threshold={0.2}:横向滚动时上报当前可见项数目(onVisibleStateChange)
tab-1
tab-2
tab-3
tab-4
tab-5
tab-6
tab-7
tab-8
tab-9
tab-10
tab-11
tab-12
当前可见项:0 / 12

动态切换数据

items 引用变化后重新测量并重算折叠结果

点击切换数据源,观察折叠结果随新 items 重新计算


API 参考

OverflowList

Props

属性说明类型默认值
items数据驱动的渲染项;scroll 模式要求每项含 key(或提供 itemKey)T[][]
renderMode渲染模式:collapse 折叠(默认)/ scroll 滚动'collapse'|'scroll''collapse'
collapseFromcollapse 模式折叠方向:end 尾部(默认)/ start 头部'start'|'end''end'
minVisibleItemscollapse 模式最小可见项数目number0
thresholdscroll 模式触发溢出回调的 IntersectionObserver 阈值number0.75
itemKey取项 key:字段名或函数;缺省取 item.keystring|number|((item: T) => string|number)undefined
visibleItemRenderer可见项渲染模板(对齐 Semi visibleItemRenderer)Snippet<[item: T, index: number]>undefined
overflowRenderer溢出项渲染模板(对齐 Semi overflowRenderer)。collapse 收全部溢出项;scroll 分别收 [头部溢出, 尾部溢出] 二次调用渲染在两端Snippet<[overflowItems: T[]]>undefined
onOverflowcollapse 模式溢出项变化回调(去重)(overflowItems: T[]) => voidundefined
onIntersectscroll 模式相交状态回调(res: Record<string, IntersectionObserverEntry>) => voidundefined
onVisibleStateChangescroll 模式可见状态变化回调(visibleState: Map<string, boolean>) => voidundefined
wrapperClassscroll 模式滚动 wrapper 类名(对齐 Semi wrapperClassName)string''
wrapperStylescroll 模式滚动 wrapper 内联样式(对齐 Semi wrapperStyle)string''
style根节点内联样式string''
class根节点附加类名string''

Events

事件载荷说明
onOverflowcollapse 模式溢出项变化时回调,携带 overflowItems
onIntersectscroll 模式各项相交状态回调,携带 { key: IntersectionObserverEntry }
onVisibleStateChangescroll 模式可见状态 Map 变化回调

Slots

名称说明
visibleItemRenderer单个可见项渲染模板(item, index)
overflowRenderer溢出节点渲染模板(overflowItems)

Accessibility

  • 行为组件,不注入语义角色(对齐 Semi);DOM 结构 cd-overflow-list > cd-overflow-list-item / cd-overflow-list-overflow / cd-overflow-list-scroll-wrapper;可见/溢出/焦点语义由 visibleItemRenderer/overflowRenderer 提供的宿主内容决定。

设计变量

变量默认值用法
--cd-overflow-list-focus-ring var(--cd-color-primary)折叠指示器键盘聚焦描边颜色
--cd-overflow-list-overflow-bg transparent折叠指示器背景色 - 默认
--cd-overflow-list-overflow-bg-hover var(--cd-color-fill-0)折叠指示器背景色 - 悬浮
--cd-overflow-list-overflow-color var(--cd-color-text-2)折叠指示器文字颜色 - 默认
--cd-overflow-list-overflow-color-hover var(--cd-color-text-0)折叠指示器文字颜色 - 悬浮