Skeleton骨架屏 - 图1

加载占位图

在需要等待加载内容的位置提供一个占位图。

何时使用

  • 网络较慢,需要长时间等待加载处理的情况下。
  • 图文信息内容较多的列表/卡片中。
  • 只在第一次加载数据的时候使用。
  • 可以被 Spin 完全代替,但是在可用的场景下可以比 Spin 提供更好的视觉效果和用户体验。

代码演示

Skeleton骨架屏 - 图2

基本

最简单的占位效果。

  1. <template>
  2. <a-skeleton />
  3. </template>

Skeleton骨架屏 - 图3

复杂的组合

更复杂的组合。

  1. <template>
  2. <a-skeleton avatar :paragraph="{ rows: 4 }" />
  3. </template>

Skeleton骨架屏 - 图4

动画效果

显示动画效果。

  1. <template>
  2. <a-skeleton active />
  3. </template>

Skeleton骨架屏 - 图5

包含子组件

加载占位图包含子组件。

  1. <template>
  2. <div class="article">
  3. <a-skeleton :loading="loading">
  4. <div>
  5. <h4>Ant Design Vue, a design language</h4>
  6. <p>
  7. We supply a series of design principles, practical patterns and high quality design
  8. resources (Sketch and Axure), to help people create their product prototypes beautifully
  9. and efficiently.
  10. </p>
  11. </div>
  12. </a-skeleton>
  13. <a-button :disabled="loading" @click="showSkeleton">
  14. Show Skeleton
  15. </a-button>
  16. </div>
  17. </template>
  18. <script>
  19. export default {
  20. data() {
  21. return {
  22. loading: false,
  23. };
  24. },
  25. methods: {
  26. showSkeleton() {
  27. this.loading = true;
  28. setTimeout(() => {
  29. this.loading = false;
  30. }, 3000);
  31. },
  32. },
  33. };
  34. </script>
  35. <style>
  36. .article h4 {
  37. margin-bottom: 16px;
  38. }
  39. .article button {
  40. margin-top: 16px;
  41. }
  42. </style>

Skeleton骨架屏 - 图6

列表

在列表组件中使用加载占位符。

  1. <template>
  2. <div>
  3. <a-switch :checked="!loading" @change="onChange" />
  4. <a-list item-layout="vertical" size="large" :data-source="listData">
  5. <a-list-item slot="renderItem" key="item.title" slot-scope="item, index">
  6. <template v-for="{ type, text } in actions" v-if="!loading" slot="actions">
  7. <span :key="type">
  8. <a-icon :type="type" style="margin-right: 8px" />
  9. {{ text }}
  10. </span>
  11. </template>
  12. <img
  13. v-if="!loading"
  14. slot="extra"
  15. width="272"
  16. alt="logo"
  17. src="https://gw.alipayobjects.com/zos/rmsportal/mqaQswcyDLcXyDKnZfES.png"
  18. />
  19. <a-skeleton :loading="loading" active avatar>
  20. <a-list-item-meta :description="item.description">
  21. <a slot="title" :href="item.href">{{ item.title }}</a>
  22. <a-avatar slot="avatar" :src="item.avatar" />
  23. </a-list-item-meta>
  24. {{ item.content }}
  25. </a-skeleton>
  26. </a-list-item>
  27. </a-list>
  28. </div>
  29. </template>
  30. <script>
  31. const listData = [];
  32. for (let i = 0; i < 3; i++) {
  33. listData.push({
  34. href: 'https://www.antdv.com/',
  35. title: `ant design vue part ${i}`,
  36. avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
  37. description:
  38. 'Ant Design, a design language for background applications, is refined by Ant UED Team.',
  39. content:
  40. 'We supply a series of design principles, practical patterns and high quality design resources (Sketch and Axure), to help people create their product prototypes beautifully and efficiently.',
  41. });
  42. }
  43. export default {
  44. data() {
  45. return {
  46. loading: true,
  47. listData,
  48. actions: [
  49. { type: 'star-o', text: '156' },
  50. { type: 'like-o', text: '156' },
  51. { type: 'message', text: '2' },
  52. ],
  53. };
  54. },
  55. methods: {
  56. onChange(checked) {
  57. this.loading = !checked;
  58. },
  59. },
  60. };
  61. </script>
  62. <style>
  63. .skeleton-demo {
  64. border: 1px solid #f4f4f4;
  65. }
  66. </style>

API

Skeleton

属性说明类型默认值
active是否展示动画效果booleanfalse
avatar是否显示头像占位图boolean | SkeletonAvatarPropsfalse
loadingtrue 时,显示占位图。反之则直接展示子组件boolean-
paragraph是否显示段落占位图boolean | SkeletonParagraphPropstrue
title是否显示标题占位图boolean | SkeletonTitlePropstrue

SkeletonAvatarProps

属性说明类型默认值
size设置头像占位图的大小number | Enum{ ‘large’, ‘small’, ‘default’ }-
shape指定头像的形状Enum{ ‘circle’, ‘square’ }-

SkeletonTitleProps

属性说明类型默认值
width设置标题占位图的宽度number | string-

SkeletonParagraphProps

属性说明类型默认值
rows设置段落占位图的行数number-
width设置段落占位图的宽度,若为数组时则为对应的每行宽度,反之则是最后一行的宽度number | string | Array<number | string>-