基础的骨架效果。

    更多参数

    可以配置骨架屏段落数量,以便更接近真实渲染效果。首行会被渲染一个长度 33% 的段首。

    Skeleton 骨架屏 - 图2

    动画效果

    ElementPlus 提供的排版模式有时候并不满足要求,当您想要用自己定义的模板时,可以通过一个具名 Slot 来自己设定模板。

    我们提供了不同的模板单元可供使用,具体可选值请看 API 详细描述。 建议在描述模板的时候,尽量靠近真实的 DOM 结构,这样可以避免 DOM 高度差距引起的抖动。

    Skeleton 骨架屏 - 图4

    1. <template>
    2. <el-skeleton style="width: 240px">
    3. <template slot="template">
    4. <el-skeleton-item variant="image" style="width: 240px; height: 240px;" />
    5. <div style="padding: 14px;">
    6. <el-skeleton-item variant="p" style="width: 50%" />
    7. <div
    8. style="display: flex; align-items: center; justify-items: space-between;"
    9. >
    10. <el-skeleton-item variant="text" style="margin-right: 16px;" />
    11. <el-skeleton-item variant="text" style="width: 30%;" />
    12. </div>
    13. </div>
    14. </template>
    15. </el-skeleton>
    16. </template>

    Loading 状态

    渲染多条数据

    大多时候, 骨架屏都被用来渲染列表, 当我们需要在从服务器获取数据的时候来渲染一个假的 UI。利用 count 这个属性就能控制渲染多少条假的数据在页面上

    请注意, 请尽可能的将 count 的大小保持在最小状态, 即使是假的 UI, DOM 元素多了之后, 照样会引起性能问题, 并且在骨架屏销毁时所消耗的时间也会更长(相对的)。

    Skeleton 骨架屏 - 图6

    1. <template>
    2. <div style="width: 400px">
    3. <p>
    4. <el-button @click="setLoading">点我重新加载</el-button>
    5. </p>
    6. <el-skeleton style="width:400px" :loading="loading" animated :count="3">
    7. <template slot="template">
    8. variant="image"
    9. style="width: 400px; height: 267px;"
    10. />
    11. <div style="padding: 14px;">
    12. <el-skeleton-item variant="h3" style="width: 50%;" />
    13. style="display: flex; align-items: center; justify-items: space-between; margin-top: 16px; height: 16px;"
    14. >
    15. <el-skeleton-item variant="text" style="margin-right: 16px;" />
    16. <el-skeleton-item variant="text" style="width: 30%;" />
    17. </div>
    18. </div>
    19. </template>
    20. <template>
    21. <el-card
    22. :body-style="{ padding: '0px', marginBottom: '1px' }"
    23. v-for="item in lists"
    24. :key="item.name"
    25. >
    26. <img :src="item.imgUrl" class="image multi-content" />
    27. <div style="padding: 14px;">
    28. <span>{{ item.name }}</span>
    29. <div class="bottom card-header">
    30. <span class="time">{{ currentDate }}</span>
    31. <el-button type="text" class="button">操作按钮</el-button>
    32. </div>
    33. </div>
    34. </el-card>
    35. </template>
    36. </el-skeleton>
    37. </div>
    38. </template>
    39. <script>
    40. data() {
    41. return {
    42. loading: true,
    43. lists: [],
    44. }
    45. },
    46. mounted() {
    47. this.loading = false
    48. this.lists = [
    49. {
    50. imgUrl:
    51. 'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg',
    52. name: '鹿',
    53. },
    54. {
    55. imgUrl:
    56. 'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg',
    57. name: '马',
    58. },
    59. {
    60. imgUrl:
    61. 'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg',
    62. name: '山狮',
    63. },
    64. ]
    65. },
    66. methods: {
    67. setLoading() {
    68. this.loading = true
    69. setTimeout(() => (this.loading = false), 2000)
    70. },
    71. },
    72. }

    Skeleton Attributes

    Skeleton Item Attributes