iter(g187): 新增虚拟列表组件
This commit is contained in:
+49
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "ui-arch-registry-index/0.1",
|
||||
"generatedAt": "2026-10-26T08:48:09.549Z",
|
||||
"generatedAt": "2026-10-26T09:07:20.198Z",
|
||||
"repoRoot": ".",
|
||||
"packages": [
|
||||
{
|
||||
@@ -210,7 +210,8 @@
|
||||
"mentions(props):@提及输入,textarea 内键入 @ 弹候选(名字 / 关键词过滤),↑↓ 环形移动、Enter/Tab 选中、Esc 只收本层,选中按光标替换并写回 value",
|
||||
"treeSelect(props):树形选择,按钮触发弹层并复用 tree(搜索 / 多选 / 级联),单选选中即收起、多选保持展开,Esc 与点外收起",
|
||||
"link(props):链接,站内跳转与站外跳转统一入口,external 自动补 ↗ 与 rel=noopener noreferrer 并给读屏播报",
|
||||
"avatarGroup(props):头像组,横向叠放并在超出 max 时折叠成 +N,整组 title 列出全部姓名"
|
||||
"avatarGroup(props):头像组,横向叠放并在超出 max 时折叠成 +N,整组 title 列出全部姓名",
|
||||
"virtualList(props):虚拟列表,固定行高长列表只渲染可视窗口 + 上下缓冲条,万级数据滚动不随总量掉帧;返回 { el, scrollTo } 句柄"
|
||||
],
|
||||
"keyTypes": [
|
||||
"ButtonProps",
|
||||
@@ -3636,6 +3637,52 @@
|
||||
"整组是展示型元素:要有点击行为就在外面包 button 或 link,不要给单个头像加交互",
|
||||
"size 与单个 avatar 一致,混排时把并排 avatar 与 avatarGroup 传同一个 size,视觉才对得上"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "virtualList",
|
||||
"title": "虚拟列表 VirtualList",
|
||||
"demo": "sec-vlist",
|
||||
"props": [
|
||||
{
|
||||
"n": "items",
|
||||
"t": "unknown[]",
|
||||
"r": 1,
|
||||
"d": "全量数据(不切片,由组件按滚动位置取窗口)"
|
||||
},
|
||||
{
|
||||
"n": "itemHeight",
|
||||
"t": "number",
|
||||
"r": 1,
|
||||
"d": "每行固定高度像素;虚拟化前提是行高一致"
|
||||
},
|
||||
{
|
||||
"n": "height",
|
||||
"t": "number",
|
||||
"r": 1,
|
||||
"d": "容器可视高度像素,超出即容器内滚动"
|
||||
},
|
||||
{
|
||||
"n": "overscan",
|
||||
"t": "number",
|
||||
"d": "上下各多渲染的缓冲条数;缺省 5,滚动更平滑",
|
||||
"df": "5"
|
||||
},
|
||||
{
|
||||
"n": "renderItem",
|
||||
"t": "(item, index) => unknown",
|
||||
"r": 1,
|
||||
"d": "行内容渲染器:返回字符串 / DOM / 响应式值"
|
||||
}
|
||||
],
|
||||
"example": "const vlist = virtualList({ items: users, itemHeight: 44, height: 320, renderItem: (u) => u.name }); vlist.scrollTo(500);",
|
||||
"steps": [
|
||||
"itemHeight 必须与每行真实高度一致:行高由组件钉死,行内容超高会溢出,请保持单行或内部滚动",
|
||||
"height 是容器可视高度(像素),列表在容器内滚动,不会撑开页面",
|
||||
"renderItem 第二参是原始下标(全量数据中的位置),不是窗口内序号",
|
||||
"滚回某条用句柄 scrollTo(index),越界自动钳制;DOM 里只存在可视窗口的行,勿按全量下标查行节点",
|
||||
"数据整体变化(换数据源)请销毁重建实例:items 是创建时快照,不响应外部数组突变",
|
||||
"滚动事件内部已 rAF 合帧,滚动回调无需节流"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user