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 | 是否开启动画 | boolean | false |
| count | 渲染多少组骨架 | number | 1 |
| loading | 是否加载中(false 时显示真实 DOM) | boolean | true |
| rows | 每组骨架的行数(仅未传 template 插槽时生效) | number | 3 |
| 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"