Skip to content

FxSkeleton 骨架屏

在数据加载过程中显示占位骨架,避免页面空白或布局抖动,提供流畅的视觉过渡体验。

包含 FxSkeleton(容器)与 FxSkeletonItem(骨架单元)两个组件。

基础用法

默认展示 3 行段落骨架。

可配置行数

通过 rows 控制每组骨架的行数,实际渲染行数 = rows + 1(首行宽 33%,其余 61%)。

动画

设置 animated 开启动画效果,骨架会出现 shimmer 流光动画。

自定义模板

通过 template 插槽自定义骨架结构,配合 FxSkeletonItem 的不同 variant 组合出任意布局。建议骨架布局与真实 DOM 结构尽量接近,避免高度差引起的布局跳动。

加载状态

loading 控制是否显示骨架屏:true 显示骨架,false 显示 default 插槽中的真实内容。

列表数据渲染

配合 count 可批量渲染多组骨架,常用于列表数据加载场景。不推荐渲染过多骨架,会影响性能与销毁耗时。

避免渲染抖动

当接口响应很快时,骨架屏刚渲染就被销毁,会产生闪烁。使用 throttle 延迟骨架屏显示来避免。

TIP

throttle 支持两种值:number(等同于 { leading: xxx },控制骨架屏显示的节流)和 object{ leading?: number, trailing?: number, initVal?: boolean })。

初始渲染即显示

loading 初始值为 true 时,可设 throttle: { initVal: true, leading: xxx } 控制初始骨架屏立即显示,不受节流延迟影响。

显示/隐藏平滑过渡

设置 throttle: { leading: xxx, trailing: xxx } 同时控制骨架屏的显示与隐藏延迟,使加载切换更平滑。

FxSkeleton API

Attributes

属性说明类型默认值
animated是否开启动画booleanfalse
count渲染多少组骨架number1
loading是否加载中(false 时显示真实 DOM)booleantrue
rows每组骨架的行数(仅未传 template 插槽时生效)number3
throttle渲染延迟(ms)。数字等同于 { leading: xxx },也可设 { leading, trailing, initVal }number | { leading?: number, trailing?: number, initVal?: boolean }0

Slots

名称说明作用域
default加载完成后显示的真实 DOM$attrs
template自定义骨架模板{ key: number }

Exposes

名称说明类型
uiLoading含节流延迟后的实际 loading 状态Ref<boolean>

FxSkeletonItem API

FxSkeletonItem 自带变体样式,可脱离 FxSkeleton 独立使用(常用于自定义骨架结构)。

Attributes

| 属性 | 说明 | 类型 | 默认值 | | --- | --- | --- | | variant | 当前渲染的骨架类型 | 'p' \| 'text' \| 'h1' \| 'h3' \| 'h5' \| 'caption' \| 'button' \| 'image' \| 'circle' \| 'rect' | text |

variant 说明

类型形态默认尺寸
p段落行宽 100%,高 16px
text文本行宽 100%,高 13px
h1一级标题宽 50%,高 20px,上边距 16px
h3三级标题宽 50%,高 18px,上边距 16px
h5五级标题宽 50%,高 16px
caption说明文字宽 50%,高 12px
button按钮宽 64px,高 40px
image图片占位宽自适应,居中显示图标(22% SVG)
circle圆形(头像)--fx-skeleton-circle-size 控制,默认 48px
rect矩形宽 100%,高 16px(继承 item 默认值)

CSS 变量

变量说明默认值
--fx-skeleton-color骨架底色var(--color-fill-light)
--fx-skeleton-to-color动画高亮色var(--color-fill-darker)
--fx-skeleton-circle-size圆形变体尺寸48px

局部引入

ts
import { FxSkeleton, FxSkeletonItem } from "@fx/components"