element-骨架屏

使用场景:在需要等待加载内容的位置设置骨架屏。

主要代码:(其中loading控制骨架屏的显示不显示,为false时不显示,为true时显示)

<template>
  <div v-show="!loading">
    <!-- 第一行 -->
    <el-row>
      <el-col :span="6" v-for="item in rowArrOne" :key="item.index">
        <el-card class="box-card">
          <template #header>
            <div class="card-header">
              <span>{{ item.name }}</span>
              <span>{{ item.time }}</span>
            </div>
          </template>
          <div class="text item">{{ item.content }}</div>
        </el-card>
      </el-col>
    </el-row>
    <!-- 第二行 -->
    <el-row>
      <el-col :span="3" v-for="item in rowArrTwo" :key="item.index">
        <el-card class="box-card">
          <div>
              <span>{{ item.title }}</span>
            </div>
          <div class="text item">{{ item.message }}</div>
        </el-card>
      </el-col>
    </el-row>
    <!-- 第三行 -->
    <el-row>
      <el-col :span="8" v-for="item in rowArrThree" :key="item.index">
        <el-card class="box-card">
          <template #header>
            <div class="card-header">
              <span>{{ item.title }}</span>
              <span>更多>></span>
            </div>
          </template>
          <div class="text item">
            <el-table :data="tableData" border style="width: 100%">
              <el-table-column prop="date" label="Date" width="180" />
              <el-table-column prop="name" label="Name" width="180" />
              <el-table-column prop="address" label="Address" />
            </el-table>
          </div>
        </el-card>
      </el-col>
    </el-row>
  </div>
  <!-- 骨架屏 -->
  <el-skeleton
      :loading="loading"
      animated
    >
      <template #template>
        <!-- 第一行 -->
        <el-row>
          <el-col :span="6" v-for="item in rowArrOne" :key="item.index">
            <el-card class="box-card">
              <template #header>
                <div class="card-header">
                  <el-skeleton-item variant="text" style="width: 20%" />
                  <el-skeleton-item variant="text" style="width: 20%" />
                </div>
              </template>
              <el-skeleton />
            </el-card>
          </el-col>
        </el-row>
            <!-- 第二行 -->
    <el-row>
      <el-col :span="3" v-for="item in rowArrTwo" :key="item.index">
        <el-card class="box-card">
          <div>
            <el-skeleton-item variant="text" style="width: 20%" />
            </div>
          <div class="text item"><el-skeleton-item variant="text" style="width: 40%" /></div>
        </el-card>
      </el-col>
    </el-row>
    <!-- 第三行 -->
    <el-row>
      <el-col :span="8" v-for="item in rowArrThree" :key="item.name">
        <el-card class="box-card">
          <template #header>
            <div class="card-header">
              <el-skeleton-item variant="text" style="width: 20%" />
              <el-skeleton-item variant="text" style="width: 20%" />
            </div>
          </template>
          <div class="table-flex">
            <div class="table-flex_div">
              <p v-for="item in tableData" :key="item.index" >
                <el-skeleton-item variant="text" width="100%" />
              </p>
            </div>
            <div class="table-flex_div">
              <p v-for="item in tableData" :key="item.index" >
                <el-skeleton-item variant="text" width="100%" />
              </p>
            </div>
            <div class="table-flex_div">
              <p v-for="item in tableData" :key="item.index" >
                <el-skeleton-item variant="text" width="100%" />
              </p>
            </div>
          </div>

        </el-card>
      </el-col>
    </el-row>
    </template>
  </el-skeleton>
</template>
<script>
import { defineComponent, reactive, toRefs } from "vue";
export default defineComponent({
  name: 'shouye-gujiaping',
  setup() {
    const state = reactive({
      rowArrOne: [
        { index: '1',name: '第一行第一个',time: '2022-10-27',content: '俄罗斯卫星通讯社华盛顿10月27日电美国国家安全委员会战略沟通协调员约翰柯比表示,美方未看到俄罗斯拟使用“脏弹”的证据。'},
        { index: '2',name: '第一行第二个',time: '2022-10-27',content: '俄罗斯卫星通讯社华盛顿10月27日电美国国家安全委员会战略沟通协调员约翰柯比表示,美方未看到俄罗斯拟使用“脏弹”的证据。'},
        { index: '3',name: '第一行第三个',time: '2022-10-27',content: '俄罗斯卫星通讯社华盛顿10月27日电美国国家安全委员会战略沟通协调员约翰柯比表示,美方未看到俄罗斯拟使用“脏弹”的证据。'},
        { index: '4',name: '第一行第四个',time: '2022-10-27',content: '俄罗斯卫星通讯社华盛顿10月27日电美国国家安全委员会战略沟通协调员约翰柯比表示,美方未看到俄罗斯拟使用“脏弹”的证据。'},
      ],
      rowArrTwo: [
        { index: "1" , title: '图标1', message: '意见反馈' },
        { index: "2" , title: '图标2', message: '意见反馈' },
        { index: "3" , title: '图标3', message: '意见反馈' },
        { index: "4" , title: '图标4', message: '意见反馈' },
        { index: "5" , title: '图标5', message: '意见反馈' },
        { index: "6" , title: '图标6', message: '意见反馈' },
        { index: "7" , title: '图标7', message: '意见反馈' },
        { index: "8" , title: '图标8', message: '意见反馈' },
      ],
      rowArrThree: [
        {index: "1" , title: '表格1'},
        {index: "2" , title: '表格2'},
        {index: "3" , title: '表格3'},
      ],
      tableData: [
          {
            date: '2016-05-03',
            name: 'Tom',
            address: '中国',
          },
          {
            date: '2016-05-02',
            name: 'Tom',
            address: '中国',
          },
          {
            date: '2016-05-04',
            name: 'Tom',
            address: '中国',
          },
          {
            date: '2016-05-01',
            name: 'Tom',
            address: '中国',
          },
          {
            date: '2016-05-04',
            name: 'Tom',
            address: '中国',
          }
        ],
        loading: true,
    })
    return {
      ...toRefs(state),
    }
  }
})
</script>
<style scoped>
:deep(.card-header) {
  display: flex;
}

:deep(.card-header) span:last-child {
  flex: 1;
  text-align: right;
}

:deep(.el-card__body) {
  text-align: left;
}

:deep(.el-col-6),
:deep(.el-col-3),
:deep(.el-col-8) {
  padding: 10px;
}

:deep(.el-col-3) .el-card__body div {
  text-align: center;
  padding: 6px;
}

:deep(.card-header) {
  justify-content: space-between;
}

:deep(.el-skeleton__item.el-skeleton__p.is-first) {
  width: 100%;
}

.table-flex {
 display: flex;
}

.table-flex .table-flex_div {
  width: 30%;
  padding: 0 10px;
}
</style>

未设置骨架屏效果截图:

设置上骨架屏效果截图:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值