进度条(el-progress)控制快慢(带遮罩的进度条)

效果如下:

<!--通过触发进度条的按钮或者其他方式来控制isProgress-->
<div v-if="isProgress" class="bacc">
   <el-progress
     v-if="isProgress"
     :text-inside="true"
     :stroke-width="15"
     :percentage="percentage"
     :color="colors"
   ></el-progress>
<!--这个div是进度条下面蹦跶的三个圆,不想要就删掉-->
   <div class="wrapper">
      <div class="circle"></div>
      <div class="circle"></div>
      <div class="circle"></div>
      <div class="shadow"></div>
      <div class="shadow"></div>
      <div class="shadow"></div>
   </div>
</div>
// 以下样式是定义的进度条占满全屏,而且会有种带遮罩的效果,如果需求不同请自己摸索一下
.bacc {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 999;
  background: rgba(0, 0, 0, 0.6);
}
.bacc .el-progress {
  position: absolute;
  width: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: flex;
  justify-content: center;
  align-items: center;
}
// 以下是蹦跶的三个小球的样式
.wrapper {
  position: absolute;
  width: 200px;
  height: 60px;
  top: 55%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: flex;
  justify-content: center;
  align-items: center;
}

.circle {
  width: 20px;
  height: 20px;
  position: absolute;
  border-radius: 50%;
  background-color: #e6ebf5;
  left: 15%;
  transform-origin: 50%;
  animation: circle7124 0.5s alternate infinite ease;
}

@keyframes circle7124 {
  0% {
    top: 60px;
    height: 5px;
    border-radius: 50px 50px 25px 25px;
    transform: scaleX(1.7);
  }

  40% {
    height: 20px;
    border-radius: 50%;
    transform: scaleX(1);
  }

  100% {
    top: 0%;
  }
}

.circle:nth-child(2) {
  left: 45%;
  animation-delay: 0.2s;
}

.circle:nth-child(3) {
  left: auto;
  right: 15%;
  animation-delay: 0.3s;
}

.shadow {
  width: 20px;
  height: 4px;
  border-radius: 50%;
  background-color: rgba(0, 0, 0, 0.9);
  position: absolute;
  top: 62px;
  transform-origin: 50%;
  z-index: -1;
  left: 15%;
  filter: blur(1px);
  animation: shadow046 0.5s alternate infinite ease;
}

@keyframes shadow046 {
  0% {
    transform: scaleX(1.5);
  }

  40% {
    transform: scaleX(1);
    opacity: 0.7;
  }

  100% {
    transform: scaleX(0.2);
    opacity: 0.4;
  }
}

.shadow:nth-child(4) {
  left: 45%;
  animation-delay: 0.2s;
}

.shadow:nth-child(5) {
  left: auto;
  right: 15%;
  animation-delay: 0.3s;
}

下面重头戏来了o

// 定时器开启(通过某种方式触发定时器)
    openTimer() {
      this.isProgress = true;
      // 进度慢
      timer1 = setInterval(() => {
        this.percentage++;
        if (this.percentage > 85 && this.percentage <= 100) {
          if (timer1) {
            clearInterval(timer1);
          }
          // 进度快
          timer2 = setInterval(() => {
            this.percentage++;
            if (this.percentage > 100) {
              clearInterval(timer2);
              // 加载完成,进度条消失
              this.isProgress = false;
              this.percentage = 0;
            }
          }, 50);
        }
      }, 200);
    }

最后推荐一个网站,里面有好几种组件,样式种类很多也很酷炫哦All elements made with CSS and HTML (uiverse.io)icon-default.png?t=MBR7https://uiverse.io/all

猜你喜欢

转载自blog.csdn.net/song_song0927/article/details/128557854