加载占位图

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

何时使用

  • 网络较慢,需要长时间等待加载处理的情况下。
  • 图文信息内容较多的列表/卡片中。

代码演示

Skeleton骨架屏 - 图1

基本

最简单的占位效果。

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

Skeleton骨架屏 - 图2

复杂的组合

更复杂的组合。

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

Skeleton骨架屏 - 图3

动画效果

显示动画效果。

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

Skeleton骨架屏 - 图4

包含子组件

加载占位图包含子组件。

  1. <template>
  2. <div class="article">
  3. <a-skeleton :loading="loading">
  4. <div>
  5. <h4>Ant Design Vue, a design language</h4>
  6. <p>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.</p>
  7. </div>
  8. </a-skeleton>
  9. <a-button @click="showSkeleton" :disabled="loading">
  10. Show Skeleton
  11. </a-button>
  12. </div>
  13. </template>
  14. <script>
  15. export default {
  16. data() {
  17. return {
  18. loading: false,
  19. }
  20. },
  21. methods: {
  22. showSkeleton() {
  23. this.loading = true
  24. setTimeout(() => {
  25. this.loading = false
  26. }, 3000);
  27. }
  28. }
  29. }
  30. </script>
  31. <style>
  32. .article h4 {
  33. margin-bottom: 16px;
  34. }
  35. .article button {
  36. margin-top: 16px;
  37. }
  38. </style>

Skeleton骨架屏 - 图5

列表

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

  1. <template>
  2. <div>
  3. <a-switch :checked="!loading" @change="onChange" />
  4. <a-list
  5. itemLayout="vertical"
  6. size="large"
  7. :dataSource="listData"
  8. >
  9. <a-list-item slot="renderItem" slot-scope="item, index" key="item.title">
  10. <template v-if="!loading" slot="actions" v-for="{type, text} in actions">
  11. <span :key="type">
  12. <a-icon :type="type" style="margin-right: 8px" />
  13. {{text}}
  14. </span>
  15. </template>
  16. <img v-if="!loading" slot="extra" width="272" alt="logo" src="https://gw.alipayobjects.com/zos/rmsportal/mqaQswcyDLcXyDKnZfES.png" />
  17. <a-skeleton :loading="loading" active avatar>
  18. <a-list-item-meta
  19. :description="item.description"
  20. >
  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://vue.ant.design/',
  35. title: `ant design vue part ${i}`,
  36. avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
  37. description: 'Ant Design, a design language for background applications, is refined by Ant UED Team.',
  38. content: '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.',
  39. });
  40. }
  41. export default {
  42. data() {
  43. return {
  44. loading: true,
  45. listData,
  46. actions: [
  47. { type: 'star-o', text: '156' },
  48. { type: 'like-o', text: '156' },
  49. { type: 'message', text: '2' },
  50. ],
  51. }
  52. },
  53. methods: {
  54. onChange(checked) {
  55. this.loading = !checked
  56. }
  57. }
  58. }
  59. </script>
  60. <style>
  61. .skeleton-demo {
  62. border: 1px solid #f4f4f4;
  63. }
  64. </style>

API

Skeleton

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

SkeletonAvatarProps

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

SkeletonTitleProps

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

SkeletonParagraphProps

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