Skip to content
API 风格:

Skeleton 骨架屏 ​

在内容加载完成前提供占位图。占位块 aria-hidden 对屏读隐藏,容器以 aria-busy 与 aria-live 通知加载状态变化;流光动画尊重 prefers-reduced-motion。

基础用法 ​

基础用法
vue
<script setup lang="ts">
import { ref } from 'vue'

const skeletonLoading = ref(true)
</script>

<template>
  <!-- 基础用法 -->
  <LhSkeleton :rows="3" :loading="skeletonLoading">
    <p>内容加载完成:众鸟高飞尽,孤云独去闲。</p>
  </LhSkeleton>
  <!-- 切换加载态 -->
  <LhButton size="small" @click="skeletonLoading = !skeletonLoading">
    {{ skeletonLoading ? '显示内容' : '显示骨架' }}
  </LhButton>
</template>
vue
<script>
export default {
  data() {
    return { skeletonLoading: true }
  },
}
</script>

<template>
  <!-- 基础用法 -->
  <LhSkeleton :rows="3" :loading="skeletonLoading">
    <p>内容加载完成:众鸟高飞尽,孤云独去闲。</p>
  </LhSkeleton>
  <!-- 切换加载态 -->
  <LhButton size="small" @click="skeletonLoading = !skeletonLoading">
    {{ skeletonLoading ? '显示内容' : '显示骨架' }}
  </LhButton>
</template>

头像组合 ​

头像组合
vue
<script setup lang="ts">
</script>

<template>
  <LhSkeleton avatar :rows="2" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSkeleton avatar :rows="2" />
</template>

关闭动画 ​

静态骨架
vue
<script setup lang="ts">
</script>

<template>
  <LhSkeleton :rows="3" :animated="false" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSkeleton :rows="3" :animated="false" />
</template>

SkeletonItem 独立占位块 ​

SkeletonItem
vue
<script setup lang="ts">
</script>

<template>
  <LhSkeletonItem variant="circle" />
  <LhSkeletonItem variant="rect" style="width: 120px; height: 60px" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSkeletonItem variant="circle" />
  <LhSkeletonItem variant="rect" style="width: 120px; height: 60px" />
</template>

Skeleton API ​

Props ​

属性说明类型默认值
loading是否加载态(false 时渲染 default 插槽)booleantrue
rows文本行数number3
avatar是否包含圆形头像占位booleanfalse
animated是否开启动画booleantrue
sxsx 快速布局属性LhSxProps—

Slots ​

插槽说明
defaultloading 为 false 时渲染的真实内容

SkeletonItem API ​

Props ​

属性说明类型默认值
variant占位块形状'text' | 'rect' | 'circle''text'
animated是否开启动画booleantrue
sxsx 快速布局属性LhSxProps—

主题变量 ​

变量说明默认值
--lh-skeleton-bg占位块底色墨色(text-regular)10% 透明混合
--lh-skeleton-highlight流光高光色底色向白色提亮 45%
--lh-skeleton-radius基础圆角--lh-border-radius-small

无障碍 ​

  • 占位块 aria-hidden="true",不进屏读
  • 容器 aria-busy="true" + aria-live="polite",加载完成切内容后自动播报
  • prefers-reduced-motion: reduce 时流光动画自动关闭

类型定义 ​

本组件对外导出的 TypeScript 类型结构如下(自动提取自 packages/components/skeleton/src/types.ts 与 @lh-ui/share/core/* 源码,点击各条目展开查看完整定义;属性说明见上方 Props 表):

LhSkeletonProps
ts
export interface LhSkeletonProps {
  /** 是否处于加载态(false 时渲染 default 插槽的真实内容) */
  loading?: boolean
  /** 文本行数 */
  rows?: number
  /** 是否包含圆形头像占位 */
  avatar?: boolean
  /** 是否开启动画 */
  animated?: boolean
  /** sx 快速布局属性 */
  sx?: LhSxProps
}
LhSkeletonItemProps
ts
export interface LhSkeletonItemProps {
  /** 占位块形状 */
  variant?: LhSkeletonVariant
  /** 是否开启动画 */
  animated?: boolean
  /** sx 快速布局属性 */
  sx?: LhSxProps
}
LhSkeletonVariant (来自 @lh-ui/share/core/skeleton)
ts
/** 骨架占位块形状 */
export type LhSkeletonVariant = 'text' | 'rect' | 'circle'