Implementierung der Funktion der kreisförmigen prozentualen Fortschrittsbalkenkomponente von Vue

Implementierung der Funktion der kreisförmigen prozentualen Fortschrittsbalkenkomponente von Vue

Jeder, der es braucht, kann darauf zurückgreifen. Wenn Sie es ausprobiert haben und Probleme festgestellt haben, hinterlassen Sie mir bitte eine Nachricht, um es mir mitzuteilen. Ich wäre sehr dankbar.

Funktionseinführung:

1. Wenn die Seite nicht aktualisiert wird und der erste Wert kleiner als der zweite Wert ist oder die inkrementelle Animation ausgeführt wird, wenn der Ring initialisiert wird

2. Wenn die Seite nicht aktualisiert wird und der erste Wert größer als der zweite Wert ist, wird die abnehmende Animation ausgeführt

3. Die in der Mitte angezeigte Prozentzahl hat eine langsame Animation (die Geschwindigkeit ist die gleiche wie bei der kreisförmigen Fortschrittsanimation).

4. Der Rückruf zur Beendigung der Animation wird ausgelöst, wenn die Animation abgeschlossen ist

5. Der externe Wert ist der Prozentsatz des Kreisfortschritts (Ganzzahl) und die Geschwindigkeit der Kreisanimation (Ganzzahl).

Der Effekt ist in der Abbildung dargestellt:

<Vorlage>
  <div Klasse="Prozentschleife">
    <div Klasse="Kreis-links">
      <div ref="leftcontent"></div>
    </div>
    <div Klasse="Kreis-rechts">
      <div ref="rightcontent"></div>
    </div>
    <div Klasse="Nummer">
      {{ Prozent }} %
    </div>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Requisiten: {
    Prozentzahl: {
      Typ: [Zeichenfolge, Zahl],
      Standard: 0
    },
    Geschwindigkeit: { // Der empfohlene Wert ist 0-3
      Typ: [Zeichenfolge, Zahl],
      Standard: 1
    }
  },
  Daten () {
    zurückkehren {
      Prozent: 0,
      initDeg: 0,
      Zeit-ID: null,
      Animation: falsch
    }
  },
  Methoden: {
    transformToDeg (Prozent) {
      sei Grad = 0
      wenn (Prozent >= 100) {
        Grad = 360
      } anders {
        Grad = parseInt(360 * Prozent / 100)
      }
      Rückkehrgrad
    },
    transformToPercent(Grad) {
      sei Prozent = 0
      wenn (Grad >= 360) {
        Prozent = 100
      } anders {
        Prozent = parseInt(100 * Grad / 360)
      }
      Rendite in Prozent
    },
    rotateLeft (deg) { // Wenn der Winkel größer als 180 ist, wird die Animation ausgeführt. $refs.leftcontent.style.transform = 'rotate(' + (deg - 180) + 'deg)'
    },
    rotateRight (deg) { // Wenn der Winkel kleiner als 180 ist, wird die Animation ausgeführt. $refs.rightcontent.style.transform = 'rotate(' + deg + 'deg)'
    },
    geheDrehen(Grad) {
      diese.animationing = true
      diese.ZeitId = setInterval(() => {
        if (deg > this.initDeg) { // Inkrementelle Animation this.initDeg += Zahl(this.speed)
          wenn (this.initDeg >= 180) {
            dies.rotateLeft(dieses.initDeg)
            this.rotateRight(180) // Um ​​die Situation zu vermeiden, dass der aus den zweimal übergebenen Prozentsätzen konvertierte Wert keine Ganzzahl der Schrittlänge ist, was dazu führen kann, dass die Links- und Rechtsdrehung fehlschlägt.
          } anders {
            dies.rechtsdrehen(dieses.initDeg)
          }
        } sonst { // Animation verringern this.initDeg -= Number(this.speed)
          wenn (this.initDeg >= 180) {
            dies.rotateLeft(dieses.initDeg)
          } anders {
            this.rotateLeft(180) // Um ​​die Situation zu vermeiden, dass der aus den zweimal übergebenen Prozentsätzen konvertierte Wert keine Ganzzahl der Schrittlänge ist, was dazu führen kann, dass die Links- und Rechtsdrehung fehlschlägt.
            dies.rechtsdrehen(dieses.initDeg)
          }
        }
        this.percent = this.transformToPercent(this.initDeg) // Prozentuale Daten-Scroll-Animation const remainer = Number(deg) - this.initDeg
        wenn (Math.abs(Rest) < diese.Geschwindigkeit) {
          this.initDeg += Rest
          wenn (this.initDeg > 180) {
            dies.rotateLeft(Grad)
          } anders {
            dies.nachRechts drehen(Grad)
          }
          diese.animationFinished()
        }
      }, 10)
    },
    animationFertig () {
      this.percent = this.percentNum // Prozentdaten-Scrollanimation this.animationing = false
      Löschintervall(diese.ZeitID)
      this.$emit('animationFinished') // Rückruf, wenn die Animation abgeschlossen ist}
  },
  erstellt () {
    dies.goRotate(dieses.transformToDeg(dieses.percentNum))
  },
  betrachten:
    'Prozentzahl': Funktion (Wert) {
      wenn (diese.Animation) return
      dies.goRotate(dies.transformToDeg(val))
    }
  }
}
</Skript>

<style scoped lang="scss">
.Prozentschleife {
  Position: relativ;
  Breite: 100 %;
  Höhe: 100%;
  Randradius: 50 %;
  Überlauf: versteckt;
  .Kreis-links, .Kreis-rechts {
    Position: absolut;
    oben: 0;
    links: 0;
    Breite: 50%;
    Höhe: 100%;
    Hintergrundfarbe: rot;
    Überlauf: versteckt;
    &>div {
      Breite: 100 %;
      Höhe: 100%;
      Hintergrundfarbe: #8a8a8a;
      Transform-Origin: rechts Mitte;
      /*Übergang: alle 0,5 s linear;*/
    }
  }
  .Kreis-rechts {
    links: 50%;
    &>div {
      Transform-Origin: links Mitte;
    }
  }
  .Nummer {
    Position: absolut;
    oben: 9%;
    unten: 9 %;
    links: 9%;
    rechts: 9%;
    Hintergrundfarbe: #fff;
    Randradius: 50 %;
    Überlauf: versteckt;
    Anzeige: Flex;
    Elemente ausrichten: zentrieren;
    Inhalt ausrichten: zentriert;
    Farbe: #000;
  }
}
</Stil>

Oben finden Sie den detaillierten Inhalt der Implementierung der Vue Circular Percentage Progress Bar-Komponentenfunktion. Weitere Informationen zur Vue-Fortschrittsleiste finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Vue implementiert einen dynamischen kreisförmigen prozentualen Fortschrittsbalken
  • Verwenden der Front-End- und Back-End-Interaktion von vue+ElementUI+echarts zum Realisieren dynamischer Donut-Diagramme im Springboot-Projekt (empfohlen)
  • Springboot verwendet die Front-End- und Back-End-Interaktion von Vue + Echarts, um dynamische Donut-Diagramme zu realisieren
  • Beispiel für die Implementierung eines kreisförmigen Fortschrittsbalkens in Vue
  • Vue zeichnet dynamisch den Effekt eines Dreiviertel-Donut-Diagramms
  • Beispielcode für die Verwendung von Echarts zum Erstellen eines Donut-Diagramms in Vue
  • Vue verwendet Canvas, um einen Kreis zu zeichnen

<<:  Fallstricke und Lösungen für das Upgrade von MySQL 5.7.23 in CentOS 7

>>:  Lösung für Nginx, das nicht zur Upstream-Adresse springt

Artikel empfehlen

Vue realisiert kaskadierende Auswahl von Provinzen, Städten und Bezirken

Vor Kurzem musste ich einen kaskadierenden Auswah...

Zusammenfassung der zehn häufigsten Probleme bei MySQL-Indexfehlern

Inhaltsverzeichnis Hintergrund 1. Die Abfragebedi...

Ein kurzes Verständnis der Unterschiede zwischen MySQL InnoDB und MyISAM

Vorwort MySQL unterstützt viele Arten von Tabelle...

Zwei Implementierungscodes der programmgesteuerten Navigation mit Vue-Router

Zwei Möglichkeiten zum Navigieren auf der Seite D...

Detaillierte Erklärung zur Verwendung von Bussen in Vue

Vue-Busmechanismus (Bus) Zusätzlich zur Verwendun...

Anwendung von HTML und CSS in Flash

Anwendung von HTML und CSS in Flash: Ich habe zufä...

MySql-Gruppierung und zufälliges Abrufen eines Datenelements aus jeder Gruppe

Idee: Einfach erst zufällig sortieren und dann gr...

10 hervorragende Web-UI-Bibliotheken/Frameworks

1. IT Mill-Toolkit IT Mill Toolkit ist ein Open-S...

So lösen Sie das Problem der automatischen Paketaktualisierung im Debian-System

Ich weiß nicht, wann es angefangen hat, aber jede...

Detaillierte Erläuterung der Redis-Master-Slave-Replikationspraxis mit Docker

Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...