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

Detaillierte Erklärung dieses Zeigeproblems in JavaScript

Vorwort Der This-Zeiger in JS hat Anfängern schon...

So verwenden Sie das Videowiedergabe-Plugin DPlayer.js

Das Videoplayer-Plugin DPlayer.js ist einfach zu ...

Zabbix implementiert die Überwachung mehrerer MySQL-Prozesse

Auf einem Server werden drei MySQL-Instanzprozess...

JavaScript-Singleton-Modus zum Implementieren benutzerdefinierter Popup-Fenster

In diesem Artikel wird der spezifische Code des J...

So zeigen Sie eine PDF-Datei mit pdfjs in vue in der Vorschau an

Inhaltsverzeichnis Vorwort denken Analysieren und...

So implementieren Sie Bildmapping mit CSS

1. Einleitung Mit Imagemaps können Sie Bereiche e...

So legen Sie einen gepunkteten Rahmen in HTML fest

Verwenden Sie CSS-Stile und HTML-Tag-Elemente Um ...

Detaillierte Erläuterung der Nginx-Upstream-Konfiguration und -Funktion

Konfigurationsbeispiel Upstream-Backend { Server ...

Perfekte Lösung für keine rc.local-Datei in Linux

Neuere Linux-Distributionen verfügen nicht mehr ü...

Verwenden Sie Iframe, um Wettereffekte auf Webseiten anzuzeigen

CSS: Code kopieren Der Code lautet wie folgt: *{Ra...