性能概述:我的项目里有很多表格,心愿表格加载动效难看一点,有多少列就显示多少列在加载,做成公共组件。
成果:

实现形式:在公共组件文件夹中创立vue,编写后,在main.js中引入即可。
loadSkeleton.vue

<template>  <el-skeleton style="width: 100%" animated>    <template slot="template">      <div class="skeleton">        <div class="skeleton-th">          <el-skeleton-item            v-show="haveLeftNumber"            variant="h1"            class="small"            :style="{ margin: columns < 10 ? '0 32px' : columns < 15 ? '0 12px' : '0 6px' }"          />          <el-skeleton-item            variant="h1"            v-for="t of columnArr"            :key="t + 'loadSkeleton-th'"            :style="{ margin: columns < 10 ? '0 32px' : columns < 15 ? '0 12px' : '0 6px' }"          />        </div>        <div class="skeleton-tr" v-for="t of rowArr" :key="t + 'loadSkeleton-tr'">          <el-skeleton-item            v-show="haveLeftNumber"            variant="text"            class="small"            :style="{ margin: columns < 10 ? '0 32px' : columns < 15 ? '0 12px' : '0 6px' }"          />          <el-skeleton-item            variant="text"            v-for="t of columnArr"            :key="t + 'loadSkeleton-td'"            :style="{ margin: columns < 10 ? '0 32px' : '0 12px' }"          />        </div>      </div>    </template> </el-skeleton></template><script>export default {  name: 'loadSkeleton',  props: {    rows: {      type: Number,      default: 10    },    columns: {      type: Number,      default: 5    },    haveLeftNumber: {      type: Boolean,      default: true    }  },  computed: {    rowArr() {      const arr = []      for (let i = 1; i <= this.rows; i++) {        arr.push(i)      }      return arr    },    columnArr() {      const arr = []      for (let i = 1; i <= this.columns; i++) {        arr.push(i)      }      return arr    }  }}</script><style>.skeleton {  display: flex;  flex-direction: column;  align-items: center;  justify-items: space-between;}.skeleton-th {  display: flex;  align-items: center;  position: relative;  width: 100%;  height: 54px;  box-sizing: border-box;  background: #fafafa;}.skeleton-th .el-skeleton__h1 {  height: 32px;}.skeleton-tr {  display: flex;  align-items: center;  position: relative;  width: 100%;  height: 52px;  box-sizing: border-box;  border-bottom: 1px solid #e8e8e8;}.skeleton-tr * {  height: 18px;}.skeleton-th .small {  flex-grow: 0;  flex-shrink: 0;  flex-basis: 18px;  width: 18px;  height: 18px;}.skeleton-tr .small {  flex-grow: 0;  flex-shrink: 0;  flex-basis: 18px;  width: 178px;}</style>

main.js中引入专用组件

// 引入表格加载骨架屏组件import loadSkeleton from '@/components/loadSkeleton'Vue.component('load-skeleton', loadSkeleton)

在须要的中央应用:

<load-skeleton v-show="loading" :columns="12" :rows="5" :haveLeftNumber="false"></load-skeleton>