Heim  >  Artikel  >  Web-Frontend  >  So erzielen Sie einen Fortschrittsbalkeneffekt in CSS3

So erzielen Sie einen Fortschrittsbalkeneffekt in CSS3

Guanhui
Guanhuinach vorne
2020-06-23 18:10:373112Durchsuche

So erzielen Sie einen Fortschrittsbalkeneffekt in CSS3

Während des Projektprozesses begann ich, die requestAnimationFrame-Methode von js zu verwenden, um den Fortschrittsbalken zu implementieren. Bei vielen Daten wirkte sich dies jedoch stark auf die Leistung aus, sodass ich zu wechselte CSS, um es zu implementieren und zu optimieren.

Veröffentlichen Sie zuerst den Code:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style type="text/css">
        *{margin: 0;padding: 0}
 
        .box{width: 100px;height: 10px;border-radius: 10px;background: #999;margin: 100px auto;border: 1px solid #ff6780;}
        .child{position: relative;height:100%;border-radius:inherit;}
 
        .process-animate{background: #ff6780;position: absolute;left: 0;top: 0;bottom: 0;border-radius:inherit;
            animation: process 1s linear forwards ;
        }
        @keyframes process
        {
            0%{
                left:0;right:100%;
            }
            20%{
                right:80%
            }
            40%{
                right:60%;
            }
            60%{right:40%;}
            80%{right:20%;}
            100%{right:0;}
        }
	
    </style>
</head>
<body>
    <p class="box">
        <p class="child" style="width:50%"> // child的百分比就是进度条的占比效果
            <p class="process-animate"></p>
        </p>
    </p>
</body>
</html>

Rendering (kopieren Sie den Code, um den dynamischen Effekt zu sehen):

Unter normalen Umständen ist die Der Prozentsatz muss auf der Grundlage von Hintergrunddaten berechnet werden, sodass er dynamisch übergeben wird. Der Vue-Code wird unten veröffentlicht.

Fortschrittsbalken-Unterkomponente (progress.vue):

<template>
  <p class="process-wrapper" :class="{&#39;addGray&#39;:addGray}">
    <p class="process-child" ref="processChild">
      <p class="process-animate" :class="{&#39;addGray&#39;:addGray}"></p>
    </p>
  </p>
</template>
 
<script>
export default {
  props: {
    addGray: {
      //置灰
      type: Boolean,
      default: false
    },
    progressWidth: {
      //进度条百分比
      type: Number,
      default: 0
    }
  },
  mounted() {
    this.$nextTick(() => {
      console.log(this.addGray, "addGray---");
      this.$refs.processChild.style.width = this.progressWidth + "%";  //动态改变进度条
      // this.$refs.processChild.style.width = 90 + "%"; 测试效果
    });
  }
};
</script>
 
<style lang="scss" scoped>
.process-wrapper {
  width: 1.98rem;
  height: 0.13rem;
  margin: 0.12rem 0 0.1rem 0;
  border-radius: 0.1rem;
  background: #fff;
  border: 0.01rem solid #ff6780;
  &.addGray {
    background: #999;
    border: 0.01rem solid #999;
  }
  .process-child {
    position: relative;
    height: 100%;
    // width: 100%;  //这个width就是动态变化。通过js改变
    border-radius: inherit;
    .process-animate {
      background: #ff6780;
      position: absolute;
      left: 0;
      top: 0;
      bottom: 0;
      border-radius: inherit;
      animation: process 1s linear forwards;
      &.addGray {
        background: #999 !important;
        // border: 0.01rem solid #999;
      }
    }
  }
}
 
@keyframes process {
  0% {
    left: 0;
    right: 100%;
  }
  20% {
    right: 80%;
  }
  40% {
    right: 60%;
  }
  60% {
    right: 40%;
  }
  80% {
    right: 20%;
  }
  100% {
    right: 0;
  }
}
</style>

Übergeordnete Komponente Aufruf:

<!-- 进度条 -->
 <Progress :addGray="inactive" :progressWidth="progressWidth"></Progress>

Sehen Sie sich den tatsächlichen Effekt an:

Empfohlenes Tutorial: „CSS Tutorial

Das obige ist der detaillierte Inhalt vonSo erzielen Sie einen Fortschrittsbalkeneffekt in CSS3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen