• 加载占位图
    • 何时使用
    • 代码演示
      • 基本
      • 复杂的组合
      • 动画效果
      • 包含子组件
      • 列表
  • API
    • Skeleton
    • SkeletonAvatarProps
    • SkeletonTitleProps
    • SkeletonParagraphProps

    加载占位图

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

    何时使用

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

    代码演示

    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>-