• 加载占位图
    • 何时使用
    • 代码演示
      • 基本
      • 复杂的组合
      • 动画效果
      • 包含子组件
      • 列表
  • 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>
    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 @click="showSkeleton" :disabled="loading">
    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 骨架屏 - 图5

    列表

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

    1. <template>
    2. <div>
    3. <a-switch :checked="!loading" @change="onChange" />
    4. <a-list itemLayout="vertical" size="large" :dataSource="listData">
    5. <a-list-item slot="renderItem" slot-scope="item, index" key="item.title">
    6. <template v-if="!loading" slot="actions" v-for="{type, text} in 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设置头像占位图的大小Enum{ 'large', 'small', 'default' }-
    shape指定头像的形状Enum{ 'circle', 'square' }-

    SkeletonTitleProps

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

    SkeletonParagraphProps

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