虚拟滚动

固定尺寸虚拟列表 AsamFixedSizeList

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

使用场景 ​

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

契约与组合 ​

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

itemSize 为固定数值,变化时真实布局更新。

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

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

基础用法与状态 ​

基础用法与状态

展开源码

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

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

展开源码

实例、类型与边界 ​

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

API

属性 AsamFixedSizeListProps

属性名说明类型默认值
style—(AsamFixedSizeListProps)["style"]undefined
className—AsamFixedSizeListProps["className"]""
width—(AsamFixedSizeListProps)["width"]—
data—any[] | undefined工厂函数(每个实例创建)
height—(AsamFixedSizeListProps)["height"]—
scrollbarAlwaysOn—boolean | undefinedfalse
layout—enum"horizontal" | "vertical"完整类型:(AsamFixedSizeListProps)["layout"]"vertical"
containerElement—(AsamFixedSizeListProps)["containerElement"]"div"
direction—enum"ltr" | "rtl"完整类型:(AsamFixedSizeListProps)["direction"]"ltr"
innerElement—(AsamFixedSizeListProps)["innerElement"]"div"
innerProps—Record<string, unknown> | undefined工厂函数(每个实例创建)
useIsScrolling—boolean | undefinedfalse
innerWidth—(AsamFixedSizeListProps)["innerWidth"]—
perfMode—(AsamFixedSizeListProps)["perfMode"]true
key—PropertyKey | undefined—
ref—VNodeRef | undefined—
ref_for—boolean | undefined—
ref_key—string | undefined—
onVnodeBeforeMount—(AsamFixedSizeListProps)["onVnodeBeforeMount"]—
onVnodeMounted—(AsamFixedSizeListProps)["onVnodeMounted"]—
onVnodeBeforeUpdate—(AsamFixedSizeListProps)["onVnodeBeforeUpdate"]—
onVnodeUpdated—(AsamFixedSizeListProps)["onVnodeUpdated"]—
onVnodeBeforeUnmount—(AsamFixedSizeListProps)["onVnodeBeforeUnmount"]—
onVnodeUnmounted—(AsamFixedSizeListProps)["onVnodeUnmounted"]—
class—unknown—
cache—number | undefined2
estimatedItemSize—number | undefined—
initScrollOffset—number | undefined0
total—number—
itemSize—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—

实例方法与状态 AsamFixedSizeListExpose

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

类型 AsamFixedSizeListInstance

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

插槽 AsamFixedSizeListSlots

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

事件 AsamFixedSizeListEmits

属性名说明类型默认值
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 声明。

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

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

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

// AsamFixedSizeListProps
type PublicContract = {
	readonly "style"?: (AsamFixedSizeListProps)["style"];
	readonly "className"?: AsamFixedSizeListProps["className"];
	readonly "width"?: (AsamFixedSizeListProps)["width"];
	readonly "data"?: any[] | undefined;
	readonly "height": (AsamFixedSizeListProps)["height"];
	readonly "scrollbarAlwaysOn"?: boolean | undefined;
	readonly "layout"?: (AsamFixedSizeListProps)["layout"];
	readonly "containerElement"?: (AsamFixedSizeListProps)["containerElement"];
	readonly "direction"?: (AsamFixedSizeListProps)["direction"];
	readonly "innerElement"?: (AsamFixedSizeListProps)["innerElement"];
	readonly "innerProps"?: Record<string, unknown> | undefined;
	readonly "useIsScrolling"?: boolean | undefined;
	readonly "innerWidth"?: (AsamFixedSizeListProps)["innerWidth"];
	readonly "perfMode"?: (AsamFixedSizeListProps)["perfMode"];
	"key"?: PropertyKey | undefined;
	"ref"?: VNodeRef | undefined;
	"ref_for"?: boolean | undefined;
	"ref_key"?: string | undefined;
	"onVnodeBeforeMount"?: (AsamFixedSizeListProps)["onVnodeBeforeMount"];
	"onVnodeMounted"?: (AsamFixedSizeListProps)["onVnodeMounted"];
	"onVnodeBeforeUpdate"?: (AsamFixedSizeListProps)["onVnodeBeforeUpdate"];
	"onVnodeUpdated"?: (AsamFixedSizeListProps)["onVnodeUpdated"];
	"onVnodeBeforeUnmount"?: (AsamFixedSizeListProps)["onVnodeBeforeUnmount"];
	"onVnodeUnmounted"?: (AsamFixedSizeListProps)["onVnodeUnmounted"];
	"class"?: unknown;
	readonly "cache"?: number | undefined;
	readonly "estimatedItemSize"?: number | undefined;
	readonly "initScrollOffset"?: number | undefined;
	readonly "total": number;
	"itemSize": 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

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

// AsamFixedSizeListExpose
type PublicContract = {
	"scrollTo": (offset: number) => void;
	"states": (AsamFixedSizeListExpose)["states"];
	"scrollToItem": (idx: number, alignment?: AsamDynamicSizeGridAlignment) => void;
	"windowRef": AsamFixedSizeListExpose["windowRef"];
	"innerRef": AsamFixedSizeListExpose["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

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

// AsamFixedSizeListInstance
type PublicContract = {
	"scrollTo": (offset: number) => void;
	"states": (AsamFixedSizeListInstance)["states"];
	"scrollToItem": (idx: number, alignment?: AsamDynamicSizeGridAlignment) => void;
	"windowRef": AsamFixedSizeListExpose["windowRef"];
	"innerRef": AsamFixedSizeListExpose["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; }>[]

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

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

参数与事件说明

itemRendered

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

scroll

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

end-reached

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

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

// AsamFixedSizeListEmits
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 关闭