Skip to content

VirtualList 虚拟列表 ​

用于大数据量列表的视口窗口渲染:只渲染可见项(含上下缓冲),首尾 padding 占位撑起滚动高度,滚动事件按 rAF 节流。通用渲染原语,供 table / tree 复用。

基础用法 ​

定高虚拟列表

通过 items property(或 items 属性传 JSON 字符串)提供数据,height 定视口高度、item-height 定每项高度;未提供模板时默认渲染 String(item)。

自定义条目内容 ​

oas-item 事件绑定内容

每个可见项渲染后派发 oas-item,detail 携带 { index, item, element },宿主据此填充条目内容;也可以在组件内放 <template slot="item"> 作为每项静态模板。

滚动事件 ​

oas-scroll 窗口展示

可见窗口:0–0 · scrollTop:0

滚动事件按 rAF 节流派发 oas-scroll,detail 为 { scrollTop, start, end }。

滚动到指定项 ​

scrollToIndex(index, options?) 方法滚动到指定索引:options.align 支持 start(项顶对齐视口顶)/ center(垂直居中)/ end(项底对齐视口底)/ auto(默认,已完整可见则不滚动,否则最小距离滚入视口);options.smooth 开启平滑滚动。list / tree 等内嵌消费方的行定位也走这一公共契约(不直查内部 DOM)。

scrollToIndex 滚动定位

跳转当前 scrollTop:0

动态行高 ​

dynamic-height 开启后各行高度可不同:未测行按 estimated-item-height(缺省沿用 item-height)预估排布,窗口行由 ResizeObserver 实测回写并逐步修正总高与偏移;视口上方行高变化会自动补偿 scrollTop 保持视觉锚定(向上滚动不跳动)。scrollToIndex 在动态模式下同样可用(按高度表定位)。预估值取接近真实平均行高时修正幅度最小。

动态行高(不等高条目混排)

scrollToIndex(40)总行高随实测逐步修正,滚动流畅不跳动

渲染缓冲 ​

buffer 控制上下超出可视区的预渲染项数(默认 4):buffer 越大,滚动时越少出现空白(白屏),代价是渲染的 DOM 节点更多。

渲染缓冲 buffer

buffer="0":渲染项数 —,仅渲染可视窗口内的项。

buffer="8":渲染项数 —,上下各多预渲染 8 项。

自定义滚动容器 ​

scroll-target 外部容器

设置 scroll-target(CSS 选择器)后,组件不自带滚动条,改由外部容器滚动整段内容(如页面级滚动),窗口按外部容器的 scrollTop 计算。

API ​

oas-virtual-list ​

属性 ​

属性说明类型默认值
buffer上下预渲染项数(超出可视区提前渲染,减少滚动白屏)string4
dynamic-height动态行高:各行高度可不同(未测行按预估排布,窗口行实测回写逐步修正;视口上方行高变化自动补偿 scrollTop 防跳动)boolean—
estimated-item-height动态行高的预估行高(px,缺省沿用 item-height;取接近真实平均行高修正幅度最小)string—
height视口高度(px)string320
item-height每项固定高度(px)string36
items数据数组(property 通道,优先于 items 属性);数据 JSON 字符串(属性通道)unknown[][]
scroll-target外部滚动容器 CSS 选择器;设置后组件不自带滚动条,监听外部滚动string—

事件 ​

事件说明
oas-item每个可见项渲染后派发,detail: { index, item, element }
oas-scroll滚动事件(rAF 节流),detail: { scrollTop, start, end }

插槽 ​

名称说明
template[slot="item"]每项静态模板,克隆到每个可见项容器(可选)

部件:::part(viewport) 滚动视口、::part(inner) 内容、::part(padding-top) / ::part(padding-bottom) 占位、::part(items) 窗口项容器、::part(item) 单项。

viewportFocusable(JS property,默认 true)控制视口是否可 Tab 聚焦;内嵌消费方(行自带 roving tabindex 时)置 false 关闭视口聚焦。

基于 MIT OR Apache-2.0 双许可发布