So implementieren Sie verschiebbare Komponenten in Vue

So implementieren Sie verschiebbare Komponenten in Vue

In diesem Artikel erfahren Sie, wie Sie ziehbare und verschiebbare Komponenten in Vue implementieren. Der spezifische Inhalt ist wie folgt

beschreiben:

Die Komponente kapselt nur die Drag-Funktion und der Inhalt wird über die Slots #header, #default und #footer angepasst.

Wirkung:

Code:

<Vorlage>
  <div
    ref="Verpackung"
    Klasse = "Drag-Bar-Wrapper"
  >
    <div
      ref="Überschrift"
      Klasse = "Drag-Bar-Header"
    >
      <!-- Kopfbereich -->
      <slot name="header" />
    </div>
    <div Klasse="Drag-Bar-Inhalt">
      <!-- Hauptinhaltsbereich -->
      <slot name="Standard" />
    </div>
    <div Klasse="Drag-Bar-Fußzeile">
      <!-- Unterer Bereich -->
      <slot name="Fußzeile" />
    </div>
  </div>
</Vorlage>
 
<Skript>
Standard exportieren {
  Daten() {
    zurückkehren {
      wrapperDom: null,
      headerDom: null,
 
      disX: 0,
      disY: 0,
 
      minLinks: 0,
      maxLinks: 0,
 
      minTop: 0,
      maxTop: 0,
 
      vorherigeLinks: 0,
      vorherigerTop: 0,
    };
  },
  Methoden: {
    initDrag() {
      dies.wrapperDom = dies.$refs.wrapper;
      dies.headerDom = dies.$refs.header;
      this.headerDom.addEventListener('mousedown', this.onMousedown, false);//Klicken Sie auf den Kopfbereich und ziehen Sie},
    bei Mausklick(e) {
      this.disX = e.clientX - this.headerDom.offsetLeft;
      this.disY = e.clientY - this.headerDom.offsetTop;
 
      dies.minLeft = dies.wrapperDom.offsetLeft;
      dies.minTop = dies.wrapperDom.offsetTop;
 
      dies.maxLeft =
        Fenster.innereBreite – dies.minLeft – dies.wrapperDom.offsetWidth;
      dies.maxTop =
        Fenster.innereHöhe – dies.minTop – dies.wrapperDom.offsetHeight;
 
      const { links, oben } = getComputedStyle(this.wrapperDom, false);
      dies.prevLeft = parseFloat(links);
      dies.prevTop = parseFloat(oben);
 
      document.addEventListener('mousemove', this.onMousemove, false);
      document.addEventListener('mouseup', this.onMouseup, false);
      document.body.style.userSelect = 'none'; //Beseitigt die Störung des ausgewählten Textes beim Ziehen},
    beiMausbewegung(e) {
      lass links = e.clientX - this.disX;
      let top = e.clientY - this.disY;
 
      wenn (-links > dies.minLinks) {
        links = -this.minLeft;
      } sonst wenn (links > this.maxLeft) {
        links = dies.maxLeft;
      }
 
      wenn (-top > dies.minTop) {
        oben = -this.minTop;
      } sonst wenn (oben > dies.maxTop) {
        oben = dies.maxTop;
      }
 
      dies.wrapperDom.style.left = dies.prevLeft + left + 'px';
      dies.wrapperDom.style.top = dies.prevTop + top + 'px';
    },
    bei Mauszeigerhoch() {
      document.removeEventListener('mousemove', this.onMousemove, false);
      document.removeEventListener('mouseup', this.onMouseup, false);
      document.body.style.userSelect = 'auto'; //Text wiederherstellen, sodass er auswählbar ist},
  },
  montiert() {
    dies.initDrag();
  }
};
</Skript>
 
<Stilbereich>
.drag-bar-wrapper {
  Position: fest;
  Z-Index: 2;
  oben: 50 %;
  links: 50%;
  transformieren: übersetzen(-50 %, -50 %);
  Anzeige: Flex;
  Flex-Richtung: Spalte;
}
.drag-bar-header {
  Hintergrundfarbe: #eee;
  Cursor: bewegen; /*Mausstil ziehen*/
}
.drag-bar-content {
  Hintergrundfarbe: #fff;
}
.drag-bar-footer {
  Hintergrundfarbe: #fff;
}
</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:
  • Vue macht Div-Höhe verschiebbar
  • Vue implementiert ein verschiebbares Dialogfeld
  • Beispielcode für eine schwebende, verschiebbare Vue-Schaltfläche
  • Vue implementiert die Draggable-Funktion des Element-UI-Dialogfelds
  • Implementierung des Draggable-Effekts der El-Dialog-Komponente im Vue-Projekt

<<:  Detaillierte Erläuterung der Verwendung des Linux-Zeitbefehls

>>:  MySQL-Paging-Abfragemethode für Millionen von Datenmengen und ihre Optimierungsvorschläge

Artikel empfehlen

Lösung für „Spezialisierter Schlüssel war zu lang“ in MySQL

Inhaltsverzeichnis Lösung 1 Lösung 2 Beim Erstell...

Der HTML 5-Entwurf wurde kein formeller Standard

<br />Gestern habe ich beim W3C gesehen, das...

JS realisiert die Berechnung des Gesamtpreises der Waren im Warenkorb

JS berechnet den Gesamtpreis der Waren im Warenko...

Ubuntu 20.04 stellt eine Verbindung zu WLAN her (2 Methoden)

Ich habe vor Kurzem Ubuntu 20.04 installiert und ...

MySQL 5.7 Installations- und Konfigurations-Tutorial unter CentOS7 64 Bit

Installationsumgebung: CentOS7 64-Bit-Mini-Versio...

Lösung für das Problem ungenauer JS-Zahlen

Die verständlichste Erklärung des Genauigkeitspro...

Vue+Websocket implementiert einfach die Chat-Funktion

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

js, um einfache Lupeneffekte zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

Was bedeutet das n nach int(n) in MySQL?

Sie wissen vielleicht bereits, dass die Länge 1 v...

So stellen Sie MySQL- und Redis-Dienste mit Docker bereit

Inhaltsverzeichnis So stellen Sie den MySQL-Diens...

Verwendung des MySQL Query Rewrite-Plugins

Plugin zum Umschreiben von Abfragen Ab MySQL 5.7....