Die Anzeige von Daten ist seit jeher eine Forderung, die in allen Lebensbereichen besteht. Insbesondere in der Front-End-Entwicklungsbranche werden Daten in einer Vielzahl von Diagrammen und Tabellen angezeigt, was äußerst ärgerlich (zu kompliziert) ist! <Vorlage> <div Klasse="Inhalt" ref="Box"> <svg style="transform: drehen(-90°)" :width="Breite" :height="Breite" xmlns="http://www.w3.org/2000/svg"> <Kreis :r="(Breite-Radius)/2" :cy="Breite/2" :cx="Breite/2" :Strichbreite="Radius" :Strich="Hintergrundfarbe" füllen="keine" /> <Kreis ref="$bar" :r="(Breite-Radius)/2" :cy="Breite/2" :cx="Breite/2" :Strich="Balkenfarbe" :Strichbreite="Radius" :stroke-linecap="istRund ? 'rund' : 'quadratisch'" :stroke-dasharray="(Breite-Radius)*3,14" :stroke-dashoffset="isAnimation ? (Breite-Radius) * 3,14 : (Breite - Radius) * 3,14 * (100 - Fortschritt) / 100" füllen="keine" /> </svg> <div Klasse="center_text" :style="{Farbe, Schriftgröße}"> <p v-if="!$slots.default" class="title">{{Fortschritt}}%</p> <Steckplatz></Steckplatz> </div> </div> </Vorlage> <Skript> Standard exportieren { Requisiten: { Radius: Typ: [Zahl, Zeichenfolge], Standard: 20 }, // Dicke des Fortschrittsbalkens progress: { Typ: [Zahl, Zeichenfolge], Standard: 20 }, // Fortschrittsbalken in Prozent barColor: { Typ: Zeichenfolge, Standard: "#1890ff" }, // Farbe des Fortschrittsbalkens backgroundColor: { Typ: Zeichenfolge, Standard: "rgba(0,0,0,0.3)" }, // Hintergrundfarbe isAnimation: { // Ist es ein Animationseffekttyp: Boolean, Standard: true }, istRunde: { // Ist es ein Rundpinsel Typ: Boolean, Standard: true }, Ausweis: { // Komponenten-ID, wird verwendet, wenn mehrere Komponenten nebeneinander existieren. Typ: [String, Number], Standard: 1 }, Dauer: { // Die gesamte Animationsdauer Typ: [String, Number], Standard: 1000 }, Verzögerung: // Wie lange soll die Ausführung verzögert werden? Typ: [String, Number], Standard: 200 }, Zeitfunktion: { // Animation-Easing-Funktionstyp: String, Standard: „cubic-bezier(0.99, 0.01, 0.22, 0.94)“ }, Kreisbreite: { //Ringbreitentyp: Zahl, Standard: 100, }, Farbe: //Textfarbtyp: String, Standard: „#000“ }, Schriftgröße: { //Textgrößentyp: String, Standard: „18px“ } }, Daten() { zurückkehren { Breite: diese.Kreisbreite, idStr: `circle_progress_keyframes_${this.id}` }; }, vorZerstören() { // Lösche das Style-Tag der alten Komponente document.getElementById(this.idStr) && document.getElementById(this.idStr).remove(); window.addEventListener(() => {}); }, montiert() { lass self = dies; this.setCircleWidth(); dies.setAnimation(); // window.onresize kann hier nicht verwendet werden Fenster.addEventListener( "Größe ändern", Entprellung(Funktion() { self.setCircleWidth(); selbst. setAnimation(selbst); }, 300) ); }, Methoden: { setzeKreisbreite() { lass box = diese.$refs.box; let width = box.clientWidth; lass Höhe = Box.ClientHeight; sei cW = Breite > Höhe? Höhe : Breite; diese.Breite = cW; }, setAnimation() { lass self = dies; wenn (self.isAnimation) { // Wiederholen Sie die Definition if (document.getElementById(self.idStr)) { console.warn("vue-circle-progress sollte nicht denselben ID-Stil haben"); document.getElementById(self.idStr).remove(); } // Datei mit Animationsstil generieren let style = document.createElement("style"); Stil.id = self.idStr; Stil.Typ = "Text/CSS"; style.innerHTML = ` @keyframes Kreis_Fortschritt_keyframes_name_${self.id} { von {stroke-dashoffset: ${(self.width - self.radius) * 3.14}px;} zu {stroke-dashoffset: ${((self.width - self.radius) * 3,14 * (100 - eigener Fortschritt)) / 100}px;}} .circle_progress_bar${ selbst.id } {Animation: Kreis_Fortschritt_Keyframes_Name_${self.id} ${ selbst.dauer }ms ${self.delay}ms ${self.timeFunction} vorwärts;}`; // Eine neue Stildatei hinzufügen document.getElementsByTagName("head")[0].appendChild(style); // Animationsklasse zum SVG-Element hinzufügen self.$refs.$bar.classList.add(`circle_progress_bar${self.id}`); } } } }; </Skript> <Stilbereich> .Inhalt {Höhe: 100 %; Anzeige: Flex; Inhalt ausrichten: Mitte; Elemente ausrichten: Mitte;} .center_text {position:absolut;} </Stil> Anwendung: <CircleProgress :id="'circle1'" :circleWidth="40" :radius="7" :progress="30" :isAnimation="true" :backgroundColor="'#E9E9E9'" :barColor="'#FF4F4F'" /> <CircleProgress :id="'circle2'" :circleWidth="40" :radius="7" :progress="50" :isAnimation="true" :backgroundColor="'#E9E9E9'" :barColor="'#FF902A'" /> <CircleProgress :id="'circle3'" :circleWidth="40" :radius="7" :progress="89" :isAnimation="true" :backgroundColor="'#E9E9E9'" :barColor="'#FFDB4F'" /> <CircleProgress :id="'circle4'" :circleWidth="40" :radius="7" :progress="25" :isAnimation="true" :backgroundColor="'#E9E9E9'" :barColor="'#B8D87E'" /> Bitte beachten Sie: Wenn Sie mehr als zwei solcher kreisförmigen Fortschrittsbalken gleichzeitig auf Ihrer Seite verwenden, müssen Sie für jeden kreisförmigen Fortschrittsbalken eine andere ID festlegen. Andernfalls sind die letztendlich von allen Kreisen angezeigten Daten die Daten des letzten Kreises. Der Code enthält eine Anti-Shake-Funktion. Hier ist die Funktion: Funktion Entprellung(func, wait, immediately) { let timeout, args, context, timestamp, result const später = Funktion () { // Entsprechend dem letzten Trigger-Zeitintervall const last = +new Date() - Zeitstempel // Das letzte Mal, als die gewrappte Funktion aufgerufen wurde, ist das Zeitintervall last kürzer als das eingestellte Zeitintervall wait wenn (letzter < warten && letzter > 0) { Timeout = setTimeout(später, warten - zuletzt) } anders { Timeout = null // Wenn auf immediate===true gesetzt, muss es hier nicht aufgerufen werden, weil die Startgrenze bereits aufgerufen wurde if (!immediate) { Ergebnis = func.apply(Kontext, Argumente) wenn (!timeout) Kontext = Argumente = null } } } Dieser Artikel bezieht sich auf ein kreisförmiges Fortschrittsbalken-Plugin Was die Verwendung dieser Komponente in React betrifft, kann sie mit einer geringfügigen Änderung entsprechend dem React-Lebenszyklus, der Syntax von React-Hooks oder der Syntax des DVA-Modus verwendet werden. Es ist sehr einfach und ich werde nicht näher darauf eingehen.
Oben sind die Details des Beispiels der Implementierung eines kreisförmigen Fortschrittsbalkens in Vue aufgeführt. Weitere Informationen zur Implementierung eines kreisförmigen Fortschrittsbalkens in Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Einfaches Teilen von Mysql-Backup-BAT-Skripten unter Windows
>>: Eine vollständige Liste gängiger Linux-Systembefehle für Anfänger
Inhaltsverzeichnis Installieren Sie CentOS7 Konfi...
Inhaltsverzeichnis 1. Traversal-Klasse 1. fürJede...
Vorwort Ich habe im Internet schon viele Artikel ...
1. Online-Installation Derzeit habe ich nur die O...
Folgen Sie dem offiziellen Tutorial, laden Sie da...
Einführung in Nginx Nginx („engine x“) ist ein le...
Zum Übertragen von Dateien zwischen dem Host und ...
<br />Struktur und Hierarchie reduzieren die...
Vorwort In diesem Artikel werden hauptsächlich di...
Spezifische Methode: 1. Öffnen Sie die Eingabeauf...
Bei der täglichen Wartung werden Threads häufig b...
Inhaltsverzeichnis Vorwort Eingabefeldkomponente ...
1. Einleitung Vor ein paar Tagen bin ich bei der ...
Mit dem Tag <tbody> wird der Stil des Tabel...
Wirkungsprinzip Verwenden Sie hauptsächlich CSS-F...