Skeleton 骨架屏 - Vant 4
Skeleton 骨架屏
介绍
用于在内容加载过程中展示一组占位图形。
引入
通过以下方式来全局注册组件,更多注册方式请参考组件注册。
js
import { createApp } from'vue'; import { Skeleton, SkeletonTitle, SkeletonImage, SkeletonAvatar, SkeletonParagraph, } from'vant'; const app = createApp(); app.use(Skeleton); app.use(SkeletonTitle); app.use(SkeletonImage); app.use(SkeletonAvatar); app.use(SkeletonParagraph);🎯 代码演示
🎪 基础用法
通过 title 属性显示标题占位图,通过 row 属性配置占位段落行数,为用户提供优雅的加载体验。
html
<template>
<van-skeleton title :row="3" />
</template>👤 显示头像
通过 avatar 属性显示头像占位图,适用于用户信息卡片等场景。
html
<template>
<van-skeleton title avatar :row="3" />
</template>🎭 展示子组件
将 loading 属性设置成 false 表示内容加载完成,此时会隐藏占位图,并显示 Skeleton 的子组件。
html
<template>
<van-skeleton title avatar :row="3" :loading="loading">
<div>
<h3>关于 Vant</h3>
<p>Vant 是一套轻量、可靠的移动端 Vue 组件库,提供了丰富的基础组件和业务组件,帮助开发者快速搭建移动应用。</p>
</div>
</van-skeleton>
</template>
<script>
import { ref, onMounted } from 'vue';
export default {
setup() {
const loading = ref(true);
onMounted(() => {
// 模拟数据加载
setTimeout(() => {
loading.value = false;
}, 2000);
});
return {
loading,
};
},
};
</script>🎨 自定义展示内容
通过 template 插槽完成自定义内容的展示,可以灵活组合各种占位元素。
html
<template>
<van-skeleton>
<template #template>
<div style="display: flex; width: 100%;">
<van-skeleton-avatar />
<div style="flex: 1; margin-left: 16px;">
<van-skeleton-paragraph :row-width="'60%'" />
<van-skeleton-paragraph :row-width="'40%'" />
</div>
</div>
</template>
</van-skeleton>
</template>📋 API
🎛️ Skeleton Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| row | 📝 段落占位图行数 | *number | string* |
| row-width | 📏 段落占位图宽度,可传数组来设置每一行的宽度 | *number | string |
| title | 📰 是否显示标题占位图 | boolean | false |
| avatar | 👤 是否显示头像占位图 | boolean | false |
| loading | 🔄 是否显示骨架屏,传 false 时会展示子组件内容 | boolean | true |
| animate | ✨ 是否开启动画 | boolean | true |
| round | 🔘 是否将标题和段落显示为圆角风格 | boolean | false |
| title-width | 📏 标题占位图宽度 | *number | string* |
| avatar-size | 📐 头像占位图大小 | *number | string* |
| avatar-shape | 🔲 头像占位图形状,可选值为 square | string | round |
📝 SkeletonParagraph Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| round | 🔘 是否将段落显示为圆角风格 | boolean | false |
| row-width | 📏 段落占位图宽度 | string | 100% |
📰 SkeletonTitle Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| round | 🔘 是否将标题显示为圆角风格 | boolean | false |
| title-width | 📏 标题占位图宽度 | *number | string* |
👤 SkeletonAvatar Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| avatar-size | 📐 头像占位图大小 | *number | string* |
| avatar-shape | 🔲 头像占位图形状,可选值为 square | string | round |
🖼️ SkeletonImage Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| image-size | 📐 图片占位图大小 | *number | string* |
| image-shape | 🔲 图片占位图形状,可选值为 square | string | round |
🎭 Skeleton Slots
| 名称 | 说明 |
|---|---|
| default | 📦 骨架屏内容 |
| template | 🎨 自定义内容 |
📘 类型定义
组件导出以下类型定义,方便在 TypeScript 项目中使用:
ts
import type {
SkeletonProps,
SkeletonImageProps,
SkeletonTitleProps,
SkeletonImageShape,
SkeletonAvatarShape,
SkeletonParagraphProps,
} from 'vant';🎨 主题定制
🎭 样式变量
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。
| 名称 | 默认值 | 描述 |
|---|---|---|
| --van-skeleton-paragraph-height | 16px | 📏 段落占位图高度 |
| --van-skeleton-paragraph-background | var(--van-active-color) | 🎨 段落占位图背景色 |
| --van-skeleton-paragraph-margin-top | var(--van-padding-sm) | 📦 段落占位图上边距 |
| --van-skeleton-title-width | 40% | 📏 标题占位图宽度 |
| --van-skeleton-avatar-size | 32px | 📐 头像占位图大小 |
| --van-skeleton-avatar-background | var(--van-active-color) | 🎨 头像占位图背景色 |
| --van-skeleton-duration | 1.2s | ⏱️ 动画持续时间 |
| --van-skeleton-image-size | 96px | 📐 图片占位图大小 |
| --van-skeleton-image-radius | 24px | 🔘 图片占位图圆角 |
📚 相关文档
🔄 加载组件
- Loading - 加载组件,用于数据加载时的提示
- PullRefresh - 下拉刷新组件,用于页面数据刷新
📦 展示组件
🎨 布局组件
🔧 工具组件
- ConfigProvider - 全局配置组件,用于主题定制
- Lazyload - 懒加载组件,优化页面性能