Vue implementiert Drag-Fortschrittsbalken

Vue implementiert Drag-Fortschrittsbalken

In diesem Artikelbeispiel wird der spezifische Code von Vue zur Realisierung des Drag-Fortschrittsbalkens zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

Komponentencode:

<Vorlage>
 <div>
  <div Klasse="Schieberegler" ref="Schieberegler">
   <div Klasse="Prozess" :style="{ width }"></div>
   <div Klasse="thunk" ref="trunk" :style="{ left }">
    <div Klasse="Block"></div>
    <div class="Tipps">
     <!-- <span>{{scale*100}}</span> -->
     <i class="fas fa-caret-down"></i>
    </div>
   </div>
  </div>
  <div>
   <Schaltfläche
    @klick="
     () => {
      dies.per++;
     }
    "
   >
    +</Schaltfläche
   >{{ pro }}%<button
    @klick="
     () => {
      wenn (dies.per > 0) {
       dies.per--;
      }
     }
    "
   >
    -
   </button>
  </div>
 </div>
</Vorlage>
<Skript>
/*
 * min Mindestwert des Fortschrittsbalkens* max Höchstwert des Fortschrittsbalkens* v-model führt eine bidirektionale Bindung des aktuellen Werts durch, um den Drag-Fortschritt in Echtzeit anzuzeigen* */
Standard exportieren {
 Requisiten: ["min", "max", "Wert"],
 Daten() {
  zurückkehren {
   slider: null, //Bildlaufleiste DOM-Element thunk: null, //DOM-Element ziehen per: this.value, //Aktueller Wert};
 },
 //Beim Rendern auf der Seite mounted() {
  dieser.slider = dieser.$refs.slider;
  dies.thunk = dies.$refs.trunk;
  var _this = dies;
  this.thunk.onmousedown = Funktion (e) {
   var Breite = parseInt(_this.width);
   var disX = e.clientX;
   document.onmousemove = Funktion (e) {
    // Wert, links, Breite
    // Wenn sich der Wert ändert, werden die linke Seite und die Breite durch die berechneten Eigenschaften geändert

    // Neue Breite beim Ziehen ermitteln
    var neueWidth = e.clientX - disX + Breite;
    // Beim Ziehen den neuen Prozentsatz abrufen var scale = newWidth / _this.slider.offsetWidth;
    _this.per = Math.ceil((_this.max - _this.min) * Skala + _this.min);
    _this.per = Math.max(_this.per, _this.min);
    _this.per = Math.min(_this.per, _this.max);
    _this.$emit("Eingabe", _this.per);
   };
   dokument.onmouseup = Funktion () {
    Dokument.onmousemove = Dokument.onmouseup = null;
   };
   gibt false zurück;
  };
 },
 berechnet: {
  // Legen Sie einen Prozentsatz fest, um die Breite des Slider-Fortschritts und den linken Wert des Stamms zu berechnen // Die entsprechende Formel lautet aktueller Wert - Minimalwert / Maximalwert - Minimalwert = Breite des Slider-Fortschritts / Gesamtbreite des Slider
  // Rumpf links = Slider-Fortschrittsbreite + Rumpfbreite / 2
  Skala() {
   zurück (dieses.per - dies.min) / (dieses.max - dies.min);
  },
  Breite() {
   wenn (dieser.Schieberegler) {
    gib diese.Schieberegler-Offsetbreite * diese.Skala + "px" zurück;
   } anders {
    gibt 0 + "px" zurück;
   }
  },
  links() {
   wenn (dieser.Schieberegler) {
    zurückkehren (
     dieser.Schieberegler.OffsetWidth * dieser.Skala -
     diese.thunk.offsetWidth / 2 +
     "px"
    );
   } anders {
    gibt 0 + "px" zurück;
   }
  },
 },
};
</Skript>
<Stil>
.Kasten {
 Rand: 100px auto 0;
 Breite: 80%;
}
.klar:nach {
 Inhalt: "";
 Anzeige: Block;
 klar: beides;
}
.Schieberegler {
 Benutzerauswahl: keine;
 Position: relativ;
 Rand: 20px 0;
 Breite: 400px;
 Höhe: 10px;
 Hintergrund: #e4e7ed;
 Rahmenradius: 5px;
 Cursor: Zeiger;
}
.Schieberegler .Prozess {
 Position: absolut;
 links: 0;
 oben: 0;
 Breite: 112px;
 Höhe: 10px;
 Rahmenradius: 5px;
 Hintergrund: #81b159;
}
.slider .thunk {
 Position: absolut;
 links: 100px;
 oben: -7px;
 Breite: 20px;
 Höhe: 20px;
}
.Schieberegler .block {
 Breite: 20px;
 Höhe: 20px;
 Randradius: 50 %;
 Rand: 2px durchgezogen #409eff;
 Hintergrund: rgba(255, 255, 255, 1);
 Übergang: 0,2 s alles;
}
.Schieberegler .Tipps {
 Position: absolut;
 links: -7px;
 unten: 30px;
 Mindestbreite: 15px;
 Textausrichtung: zentriert;
 Polsterung: 4px 8px;
 /* Hintergrund: #000; */
 Rahmenradius: 5px;
 Höhe: 24px;
 Farbe: #fff;
}
.slider .tipps ich {
 Position: absolut;
 Rand links: -5px;
 links: 50%;
 unten: -9px;
 Schriftgröße: 16px;
 Farbe: #000;
}
.slider .block:hover {
 transformieren: Skalierung(1.1);
 Deckkraft: 0,6;
}
</Stil>

Anruf:

<Vorlage>
 <slider :min="0" :max="100" v-model="pro"></slider>
</Vorlage>

<Skript>
Schieberegler aus „@/components/slider“ importieren;
Standard exportieren {
 Daten() {
  zurückkehren {};
 },
 berechnet: {
  pro:
   erhalten() {
    gebe 0 zurück;
   },
   setze(Wert) {
    konsole.log(Wert);
   },
  },
 },
 Komponenten: {Schieberegler},
 montiert() {},
 Methoden: {},
};
</Skript>

<Stil>
</Stil>

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispiel für die Implementierung eines kreisförmigen Fortschrittsbalkens in Vue
  • vue.js + ElementUI realisiert den Effekt des Fortschrittsbalkens, der zur Kennwortstärke auffordert
  • Fortschrittsbalkenfunktion beim Laden der Vue-Seite (Beispielcode)
  • Kapselung des zyklischen Ladefortschrittsbalkens (Vue-Plug-in-Version und native JS-Version)
  • Vue konfiguriert nprogress, um den Fortschrittsbalken oben auf der Seite zu implementieren
  • So verwenden Sie den NProgress-Fortschrittsbalken in Vue
  • Das Vue-Projekt implementiert eine Fortschrittsbalkenfunktion für den Dateidownload

<<:  So installieren Sie eine MySQL-Datenbank im Deepin 2014-System

>>:  Drei Möglichkeiten zum Konfigurieren virtueller Nginx-Hosts (basierend auf Domänennamen)

Artikel empfehlen

Vue nutzt Baidu Maps zur Realisierung der Stadtpositionierung

In diesem Artikel wird der spezifische Code von V...

Zusammenfassung einiger meiner häufig verwendeten Linux-Befehle

Ich habe zwei Jahre lang im Betrieb und in der Wa...

Eine schnelle Lösung für den ersten Anmeldefehler in mysql5.7.20

Zunächst stellen wir vor, wie (1) MySQL 5.7 hat e...

Hinweise zu den Formularkomponenten des Elements

Elementform und Codeanzeige Weitere Einzelheiten ...

Über die Kontrolle und Verschönerung von Eingabedateien

Beim Hochladen auf einigen Websites wird nach dem...

Referenzen und Referenzdetails in Vue3

Der Editor teilt Ihnen auch die entsprechenden Pr...

Grundlegende Nutzungsdetails zur Vue-Komponentenbildung

Inhaltsverzeichnis 1. Was ist Komponentenbildung?...

JavaScript implementiert einfache Rechnerfunktion

In diesem Artikel wird der spezifische JavaScript...

So installieren Sie MySQL 8.0 in Docker

Umgebung: MacOS_Cetalina_10.15.1, Mysql8.0.18, Do...

So installieren und verwenden Sie Cockpit unter CentOS 8/RHEL 8

Cockpit ist ein webbasiertes Serververwaltungstoo...

Beispiel für die Verwendung von #include-Dateien in HTML

Es gibt zwei Dateien a.htm und b.htm. Im selben Ve...

Beispielerklärung für langsame MySQL-Abfragen und -Protokolle

1. Einleitung Durch Aktivieren des Slow Query Log...

So konvertieren Sie MySQL-Bin-Log-Protokolldateien in SQL-Dateien

mysqlbinlog-Version anzeigen mysqlbinlog -V [--ve...

Analysieren Sie, wie eine SQL-Abfrageanweisung in MySQL ausgeführt wird

Inhaltsverzeichnis 1. Übersicht über die logische...

MySQL verwendet frm-Dateien und ibd-Dateien, um Tabellendaten wiederherzustellen

Inhaltsverzeichnis Einführung in FRM-Dateien und ...