虚拟滚动

动态尺寸虚拟列表 AsamDynamicSizeList

在有限视窗内渲染可见项目,减少长列表的挂载量。

使用场景 ​

在有限视窗内渲染可见项目,减少长列表的挂载量。

契约与组合 ​

这是虚拟列表基础入口,只渲染可见范围与 cache 缓冲。提供固定 height / width 和 total / data,默认插槽的 style 必须放在真实项目根节点上,否则绝对位置与尺寸计算无法生效。插槽提供 index / style / data / isScrolling。

itemSize 是尺寸函数;estimatedItemSize 用于尚未测算范围。列表未提供 resetAfterIndex 公开方法;改变尺寸函数结果时,以 key 重建尺寸缓存并用 scrollTo 恢复原滚动位置,边界示例完整演示这一流程。

通过公开方法定位列表,支持水平或垂直布局。 完整说明。

这些低层入口没有表格列注册或独立选择模型,也没有额外四档 size;行列尺寸由宿主决定,颜色、间距和字体来自 ASAM tokens。

基础用法与状态 ​

基础用法与状态

展开源码

首尾定位、动态尺寸、RTL 与滚动条 ​

首尾定位、动态尺寸、RTL 与滚动条

展开源码

实例、类型与边界 ​

公开 API 与下列完整 SFC 来自同一组件入口。TS 和 JS 演示分别提供所有本地依赖文件;类型约束只出现在 TS 中。远程请求与业务持久化由宿主承担。

API

属性 AsamDynamicSizeListProps

属性名说明类型默认值
style—(AsamDynamicSizeListProps)["style"]undefined
className—AsamDynamicSizeListProps["className"]""
width—(AsamDynamicSizeListProps)["width"]—
data—any[] | undefined工厂函数(每个实例创建)
height—(AsamDynamicSizeListProps)["height"]—
scrollbarAlwaysOn—boolean | undefinedfalse
layout—enum"horizontal" | "vertical"完整类型:(AsamDynamicSizeListProps)["layout"]"vertical"
containerElement—(AsamDynamicSizeListProps)["containerElement"]"div"
direction—enum"ltr" | "rtl"完整类型:(AsamDynamicSizeListProps)["direction"]"ltr"
innerElement—(AsamDynamicSizeListProps)["innerElement"]"div"
innerProps—Record<string, unknown> | undefined工厂函数(每个实例创建)
useIsScrolling—boolean | undefinedfalse
innerWidth—(AsamDynamicSizeListProps)["innerWidth"]—
perfMode—(AsamDynamicSizeListProps)["perfMode"]true
key—PropertyKey | undefined—
ref—VNodeRef | undefined—
ref_for—boolean | undefined—
ref_key—string | undefined—
onVnodeBeforeMount—(AsamDynamicSizeListProps)["onVnodeBeforeMount"]—
onVnodeMounted—(AsamDynamicSizeListProps)["onVnodeMounted"]—
onVnodeBeforeUpdate—(AsamDynamicSizeListProps)["onVnodeBeforeUpdate"]—
onVnodeUpdated—(AsamDynamicSizeListProps)["onVnodeUpdated"]—
onVnodeBeforeUnmount—(AsamDynamicSizeListProps)["onVnodeBeforeUnmount"]—
onVnodeUnmounted—(AsamDynamicSizeListProps)["onVnodeUnmounted"]—
class—unknown—
cache—number | undefined2
estimatedItemSize—number | undefined—
initScrollOffset—number | undefined0
total—number—
itemSize—(index: number) => number—
onItemRendered—((cacheStart: number, cacheEnd: number, visibleStart: number, visibleEnd: number) => void) | undefined—
onScroll—((direction: "forward" | "backward", offset: number, updateRequested: boolean) => void) | undefined—
onEndReached—((edge: "top" | "bottom" | "right" | "left") => void) | undefined—
onEnd-reached—((edge: "top" | "bottom" | "right" | "left") => void) | undefined—

实例方法与状态 AsamDynamicSizeListExpose

属性名说明类型默认值
scrollTo—(offset: number) => void—
states—(AsamDynamicSizeListExpose)["states"]—
scrollToItem—(idx: number, alignment?: AsamDynamicSizeGridAlignment) => void—
windowRef—AsamDynamicSizeListExpose["windowRef"]—
innerRef—AsamDynamicSizeListExpose["windowRef"]—
getItemStyleCache—(key?: unknown, size?: unknown, direction?: unknown) => Record<string, CSSProperties>—
resetScrollTop—() => void—

类型 AsamDynamicSizeListInstance

属性名说明类型默认值
scrollTo—(offset: number) => void—
states—(AsamDynamicSizeListInstance)["states"]—
scrollToItem—(idx: number, alignment?: AsamDynamicSizeGridAlignment) => void—
windowRef—AsamDynamicSizeListExpose["windowRef"]—
innerRef—AsamDynamicSizeListExpose["windowRef"]—
getItemStyleCache—(key?: unknown, size?: unknown, direction?: unknown) => Record<string, CSSProperties>—
resetScrollTop—() => void—

插槽 AsamDynamicSizeListSlots

属性名说明类型默认值
default—((scope: { data: unknown[]; index: number; isScrolling?: boolean; style: CSSProperties; }) => VNode[]) | undefined—

事件 AsamDynamicSizeListEmits

属性名说明类型默认值
itemRendered—[cacheStart: number, cacheEnd: number, visibleStart: number, visibleEnd: number]—
scroll—[direction: "forward" | "backward", offset: number, updateRequested: boolean]—
end-reached—[edge: "top" | "bottom" | "right" | "left"]—

更多参数与事件说明 ​

契约与组合 ​

scrollTo(offset) / scrollToItem(index,alignment) / resetScrollTop() 支持公开定位;alignment 可以为 start / center / end / auto / smart(以本入口类型为准)。direction 支持 ltr / rtl,layout 支持 vertical / horizontal。scrollbarAlwaysOn 控制持续显示;useIsScrolling 决定插槽是否读取滚动中状态。末端定位、尺寸切换和 RTL 都保留首尾项目可达。

参数与事件补充说明

公开绑定参数,包含具备类型的事件监听器;默认值由运行时定义提供。

参数与事件说明

style

必填:否;声明来源:上游声明。

style 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:false

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

默认值与来源
undefined(已安装运行时;已安装组件)
className

必填:否;声明来源:上游声明。

className 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:false

默认值与来源
""(已安装运行时;已安装组件)
width

必填:否;声明来源:上游声明。

data

必填:否;声明来源:上游声明。

默认值与来源
工厂函数(每个实例创建)(实例工厂;已安装组件)
height

必填:是;声明来源:上游声明。

height 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

scrollbarAlwaysOn

必填:否;声明来源:上游声明。

scrollbarAlwaysOn 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:false / true

默认值与来源
false(隐式 Boolean 默认;已安装组件)
layout

必填:否;声明来源:上游声明。

layout 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:"horizontal" / "vertical"

默认值与来源
"vertical"(已安装运行时;已安装组件)
containerElement

必填:否;声明来源:上游声明。

containerElement 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:大型实例类型;完整类型见公开类型视图。

默认值与来源
"div"(已安装运行时;已安装组件)
direction

必填:否;声明来源:上游声明。

direction 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:"ltr" / "rtl"

默认值与来源
"ltr"(已安装运行时;已安装组件)
innerElement

必填:否;声明来源:上游声明。

默认值与来源
"div"(已安装运行时;已安装组件)
innerProps

必填:否;声明来源:上游声明。

默认值与来源
工厂函数(每个实例创建)(实例工厂;已安装组件)
useIsScrolling

必填:否;声明来源:上游声明。

useIsScrolling 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:false / true

默认值与来源
false(隐式 Boolean 默认;已安装组件)
innerWidth

必填:否;声明来源:上游声明。

perfMode

必填:否;声明来源:上游声明。

perfMode 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:false / true

默认值与来源
true(已安装运行时;已安装组件)
key

必填:否;声明来源:依赖声明。

ref

必填:否;声明来源:依赖声明。

ref 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(ref: Element | ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions>, {}, {}, "", {}, any> | null, refs: Record<string, any>): void

  • ref.value: any — 依赖声明
  • ref.__@RefSymbol@8854: true — 依赖声明

    仅用于区分类型:保留在公开声明中,通过私有 Symbol 避免出现在编辑器自动补全中。

    枚举:true

ref_for

必填:否;声明来源:依赖声明。

ref_for 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

枚举:false / true

ref_key

必填:否;声明来源:依赖声明。

onVnodeBeforeMount

必填:否;声明来源:依赖声明。

onVnodeBeforeMount 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(vnode: VNode<RendererNode, RendererElement, { [key: string]: any; }>): void

onVnodeMounted

必填:否;声明来源:依赖声明。

onVnodeMounted 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(vnode: VNode<RendererNode, RendererElement, { [key: string]: any; }>): void

onVnodeBeforeUpdate

必填:否;声明来源:依赖声明。

onVnodeBeforeUpdate 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(vnode: VNode<RendererNode, RendererElement, { [key: string]: any; }>, oldVNode: VNode<RendererNode, RendererElement, { [key: string]: any; }>): void

onVnodeUpdated

必填:否;声明来源:依赖声明。

onVnodeUpdated 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(vnode: VNode<RendererNode, RendererElement, { [key: string]: any; }>, oldVNode: VNode<RendererNode, RendererElement, { [key: string]: any; }>): void

onVnodeBeforeUnmount

必填:否;声明来源:依赖声明。

onVnodeBeforeUnmount 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(vnode: VNode<RendererNode, RendererElement, { [key: string]: any; }>): void

onVnodeUnmounted

必填:否;声明来源:依赖声明。

onVnodeUnmounted 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(vnode: VNode<RendererNode, RendererElement, { [key: string]: any; }>): void

class

必填:否;声明来源:依赖声明。

cache

必填:否;声明来源:上游声明。

默认值与来源
2(已安装运行时;已安装组件)
estimatedItemSize

必填:否;声明来源:上游声明。

initScrollOffset

必填:否;声明来源:上游声明。

默认值与来源
0(已安装运行时;已安装组件)
total

必填:是;声明来源:上游声明。

itemSize

必填:是;声明来源:ASAM 声明。

itemSize 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(index: number): number

onItemRendered

必填:否;声明来源:ASAM 声明。

onItemRendered 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(...args: [cacheStart: number, cacheEnd: number, visibleStart: number, visibleEnd: number]): void

onScroll

必填:否;声明来源:ASAM 声明。

onScroll 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(...args: [direction: "forward" | "backward", offset: number, updateRequested: boolean]): void

onEndReached

必填:否;声明来源:ASAM 声明。

onEndReached 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(...args: [edge: "top" | "bottom" | "right" | "left"]): void

onEnd-reached

必填:否;声明来源:ASAM 声明。

onEnd-reached 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(...args: [edge: "top" | "bottom" | "right" | "left"]): void

AsamDynamicSizeListProps 公开类型视图
ts
import type { VNodeRef, ComponentPublicInstance, ComponentOptionsBase, ComponentProvideOptions, VNode, RendererNode, RendererElement } from 'vue';
import type { AsamDynamicSizeListProps, AsamDynamicSizeListEmits } from '@asam-ui/ui';

type PublicMember<T, K extends PropertyKey> = T extends unknown ? K extends keyof T ? T[K] : never : never;

// AsamDynamicSizeListProps
type PublicContract = {
	readonly "style"?: (AsamDynamicSizeListProps)["style"];
	readonly "className"?: AsamDynamicSizeListProps["className"];
	readonly "width"?: (AsamDynamicSizeListProps)["width"];
	readonly "data"?: any[] | undefined;
	readonly "height": (AsamDynamicSizeListProps)["height"];
	readonly "scrollbarAlwaysOn"?: boolean | undefined;
	readonly "layout"?: (AsamDynamicSizeListProps)["layout"];
	readonly "containerElement"?: (AsamDynamicSizeListProps)["containerElement"];
	readonly "direction"?: (AsamDynamicSizeListProps)["direction"];
	readonly "innerElement"?: (AsamDynamicSizeListProps)["innerElement"];
	readonly "innerProps"?: Record<string, unknown> | undefined;
	readonly "useIsScrolling"?: boolean | undefined;
	readonly "innerWidth"?: (AsamDynamicSizeListProps)["innerWidth"];
	readonly "perfMode"?: (AsamDynamicSizeListProps)["perfMode"];
	"key"?: PropertyKey | undefined;
	"ref"?: VNodeRef | undefined;
	"ref_for"?: boolean | undefined;
	"ref_key"?: string | undefined;
	"onVnodeBeforeMount"?: (AsamDynamicSizeListProps)["onVnodeBeforeMount"];
	"onVnodeMounted"?: (AsamDynamicSizeListProps)["onVnodeMounted"];
	"onVnodeBeforeUpdate"?: (AsamDynamicSizeListProps)["onVnodeBeforeUpdate"];
	"onVnodeUpdated"?: (AsamDynamicSizeListProps)["onVnodeUpdated"];
	"onVnodeBeforeUnmount"?: (AsamDynamicSizeListProps)["onVnodeBeforeUnmount"];
	"onVnodeUnmounted"?: (AsamDynamicSizeListProps)["onVnodeUnmounted"];
	"class"?: unknown;
	readonly "cache"?: number | undefined;
	readonly "estimatedItemSize"?: number | undefined;
	readonly "initScrollOffset"?: number | undefined;
	readonly "total": number;
	"itemSize": (index: number) => number;
	"onItemRendered"?: ((cacheStart: number, cacheEnd: number, visibleStart: number, visibleEnd: number) => void) | undefined;
	"onScroll"?: ((direction: "forward" | "backward", offset: number, updateRequested: boolean) => void) | undefined;
	"onEndReached"?: ((edge: "top" | "bottom" | "right" | "left") => void) | undefined;
	"onEnd-reached"?: ((edge: "top" | "bottom" | "right" | "left") => void) | undefined;
};

完整的上游实例,包含全部公开方法与响应式状态。

参数与事件说明

scrollTo

必填:是;声明来源:上游声明。

scrollTo 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(offset: number): void

states

必填:是;声明来源:上游声明。

states 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

scrollToItem

必填:是;声明来源:上游声明。

scrollToItem 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(idx: number, alignment?: AsamDynamicSizeGridAlignment | undefined): void

windowRef

必填:是;声明来源:上游声明。

windowRef 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

innerRef

必填:是;声明来源:上游声明。

innerRef 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

getItemStyleCache

必填:是;声明来源:ASAM 声明。

getItemStyleCache 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(key?: unknown, size?: unknown, direction?: unknown): Record<string, CSSProperties>

resetScrollTop

必填:是;声明来源:ASAM 声明。

resetScrollTop 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(): void

AsamDynamicSizeListExpose 公开类型视图
ts
import type { CSSProperties } from 'vue';
import type { AsamDynamicSizeListExpose, AsamDynamicSizeListProps, AsamDynamicSizeGridAlignment } from '@asam-ui/ui';

// AsamDynamicSizeListExpose
type PublicContract = {
	"scrollTo": (offset: number) => void;
	"states": (AsamDynamicSizeListExpose)["states"];
	"scrollToItem": (idx: number, alignment?: AsamDynamicSizeGridAlignment) => void;
	"windowRef": AsamDynamicSizeListExpose["windowRef"];
	"innerRef": AsamDynamicSizeListExpose["windowRef"];
	"getItemStyleCache": (key?: unknown, size?: unknown, direction?: unknown) => Record<string, CSSProperties>;
	"resetScrollTop": () => void;
};

参数与事件说明

scrollTo

必填:是;声明来源:上游声明。

scrollTo 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(offset: number): void

states

必填:是;声明来源:上游声明。

states 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

scrollToItem

必填:是;声明来源:上游声明。

scrollToItem 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(idx: number, alignment?: AsamDynamicSizeGridAlignment | undefined): void

windowRef

必填:是;声明来源:上游声明。

windowRef 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

innerRef

必填:是;声明来源:上游声明。

innerRef 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

嵌套展开边界:框架 / 平台类型;完整类型见公开类型视图。

getItemStyleCache

必填:是;声明来源:ASAM 声明。

getItemStyleCache 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(key?: unknown, size?: unknown, direction?: unknown): Record<string, CSSProperties>

resetScrollTop

必填:是;声明来源:ASAM 声明。

resetScrollTop 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(): void

AsamDynamicSizeListInstance 公开类型视图
ts
import type { CSSProperties } from 'vue';
import type { AsamDynamicSizeListInstance, AsamDynamicSizeListExpose, AsamDynamicSizeListProps, AsamDynamicSizeGridAlignment } from '@asam-ui/ui';

// AsamDynamicSizeListInstance
type PublicContract = {
	"scrollTo": (offset: number) => void;
	"states": (AsamDynamicSizeListInstance)["states"];
	"scrollToItem": (idx: number, alignment?: AsamDynamicSizeGridAlignment) => void;
	"windowRef": AsamDynamicSizeListExpose["windowRef"];
	"innerRef": AsamDynamicSizeListExpose["windowRef"];
	"getItemStyleCache": (key?: unknown, size?: unknown, direction?: unknown) => Record<string, CSSProperties>;
	"resetScrollTop": () => void;
};

作用域插槽保留上游实例契约。

参数与事件说明

default

必填:否;声明来源:ASAM 声明。

default 参数与事件数据

下列为声明可读视图;可导入类型以公开类型视图为准。分支条件与父属性一致。

事件参数:(scope: { data: unknown[]; index: number; isScrolling?: boolean; style: CSSProperties; }): VNode<import("vue").RendererNode, import("vue").RendererElement, { [key: string]: any; }>[]

AsamDynamicSizeListSlots 公开类型视图
ts
import type { CSSProperties, VNode } from 'vue';
import type { AsamDynamicSizeListSlots } from '@asam-ui/ui';

// AsamDynamicSizeListSlots
type PublicContract = {
	"default"?: ((scope: { data: unknown[]; index: number; isScrolling?: boolean; style: CSSProperties; }) => VNode[]) | undefined;
};

参数与事件说明

itemRendered

必填:是;声明来源:ASAM 声明。

scroll

必填:是;声明来源:ASAM 声明。

end-reached

必填:是;声明来源:ASAM 声明。

AsamDynamicSizeListEmits 公开类型视图
ts
import type { AsamDynamicSizeListEmits } from '@asam-ui/ui';

// AsamDynamicSizeListEmits
type PublicContract = {
	"itemRendered": [cacheStart: number, cacheEnd: number, visibleStart: number, visibleEnd: number];
	"scroll": [direction: "forward" | "backward", offset: number, updateRequested: boolean];
	"end-reached": [edge: "top" | "bottom" | "right" | "left"];
};

搜索文档

Tab 选择结果 Enter 打开 Esc 关闭