浅改一下Element Plus的Loading效果

3,655 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

前段时间在跟的项目已经接近尾声,在这个过程中也遇到了很多问题,收获了许多。前两天为项目补了一个加载loading的效果,在实现的过程中遇到些困难也有一些小小感悟,于是写下这篇来记录一下。若有不对,请各位多多指正。

官方的全屏loading效果及代码

5-1.png

官方核心代码:

<template>
  <el-button type="primary" @click="openFullScreen2"> As a service </el-button>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { ElLoading } from 'element-plus'
const fullscreenLoading = ref(false)
const openFullScreen2 = () => {
  const loading = ElLoading.service({
    lock: true,
    text: 'Loading',
    background: 'rgba(0, 0, 0, 0.7)',
  })
}
</script>

而我要修改的是把里面的图片和文字换为自己需要的。修改文字是很简单的,直接在ElLoading.service里的text修改就行,没头绪就在与不知道如何换掉它的默认图片

修改过程

  • 1.先分析这个Loading的结构

5-2.png 由上图可以明显看它分为三层,最外层是el-loading-spinner,第二层是circular,最里面的一层是svg即旋转的图片所在之处。因此修改肯定是从第二层和第三层入手咯。

  • 2.网上大部分文章实现的方法是通过给el-loading-spinner添加gif的图片作为背景,并且把circular的display设置为none来实现的
.el-loading-spinner{
    background: url('../assets/test.gif') no-repeat center;
      background-size: 200px 120px;
      height: 100%;
      top: 0;
      .circular{
        display: none; 
      }
      .el-loading-text {
      margin-top: 1130px;
    }
  }

实现效果:

5-3.png 这个方法确实是可行的,但同时也带来了限制:只能用gif动图。

那假如我就是要用png、jpg等格式呢,那要怎么样才能实现呢? 当选择这些格式的时候是无法自动旋转的,因此我们得给它加上animation的旋转动画效果。

.el-loading-spinner{
    background: url('../assets/kobe.jpg') no-repeat center;
      background-size: 200px 120px;
      height: 100%;
      top: 0;
      animation: test 1s infinite;
      .circular{
        // display: none;
      }
      .el-loading-text {
      margin-top: 1130px;
    }
  }
  
  <style>
      ...
      @keyframes test {
    100% {
      transform: rotate(360deg);
    }
  }
  </style>

但效果却不是我们相要的

5-4.png

-3.查阅Loading的源码 惊人的发现可以自己设置svg噢!

5-6.png

-4.最终实现效果:

5-7.png

5-8.png

指令方法

指令的方法大家有兴趣也可以自行了解一下 5-5.png