Einfache Implementierung von Vue Drag & Drop

Einfache Implementierung von Vue Drag & Drop

In diesem Artikel wird hauptsächlich die einfache Implementierung von Vue Drag & Drop wie folgt vorgestellt:

Rendern

Es werden keine Duplikate festgestellt und alte Daten nicht gelöscht.

Datenkörper

 <MyShuttle:dataOrigin='[
          {
            Name: "Daten 001",
            ID: "Nummer 001",
          },
          {
            Name: "Daten 002",
            ID: "Nummer 001",
          },
          {
            Name: "Daten 003",
            ID: "Nummer 001",
          }]' 
          
      :Leerzeichen='[{
            Name:"Rechts 001",
            ID:"Rechts 001",
            }]' />

Code

draggable Draggable aktivieren

@dragenter.prevent @dragover.prevent
// Verhindern Sie, dass der Browser dieses Verhalten standardmäßig verwendet, da sonst ein Kreuz angezeigt wird, was nicht schön ist.

Verhindern von Standardverhalten

@dragleave.stop="dragleave($event, 'main')"

Das Betreten und Verlassen des aktuellen Elements löst

@dragend.stop="dragEnd($event, item)"

Den Drag-Content-Trigger löschen

Ziehen von Ereignissen und Eigenschaften

Markieren Sie „Das ist sehr wichtig!!!“ Dadurch wird das Verhalten des Drag-Ereignisses bestimmt. Wenn Sie mit dem Ziehen beginnen, wird die Stelle, auf die Sie mit der Maus geklickt haben, als Markierung verwendet.
dragstart: Wird ausgeführt, wenn die Maus geklickt und bewegt wird.
drag: Nachdem dragstart ausgeführt wurde, wird es kontinuierlich ausgelöst, während sich die Maus bewegt.
dragend: wird ausgelöst, wenn das Ziehverhalten endet, d. h. wenn die Maus losgelassen wird.
dragenter: Wird ausgelöst, wenn die Markierung des gezogenen Elements in ein DOM-Element eintritt, und wird zuerst ausgelöst. Das eingegebene DOM-Element löst dieses Ereignis aus.
dragover: Wird ausgelöst, wenn sich die Markierung des gezogenen Elements auf dem eingehenden DOM-Element bewegt, und auch, wenn es sich selbst bewegt.
dragleave: Wird ausgelöst, wenn das gezogene Element den betretenen DOM verlässt.

H5 Drag-Attribut ziehbar

draggable: Wenn ein Element ziehbar sein muss, muss es auf true gesetzt werden. Der Standardwert ist false. Ausgewählte Texte, Bilder und Links können standardmäßig gezogen werden.
DataTransfer-Objekt: Diese Eigenschaft wird zum Speichern der per Drag & Drop übertragenen Daten und Interaktionsinformationen verwendet. Diese Komponente verwendet sie nicht und wird vorübergehend ignoriert.

Wenn die Maus zum Ziel-Div-Feld bewegt wird, wird es hinzugefügt. Das einfache Beispiel kann das Problem am besten veranschaulichen.

<Vorlage>
  <div Klasse="MeinShuttle">
    <div Klasse="MeinShuttleLeft">
      <div class="title">Datenquelle</div>
      <div Klasse = "dataBox" @dragleave.stop = "dragleave($event, 'main')">
        <div v-for="(item, i) in dataOrigin" :key="i" class="dataList" ziehbar @dragenter.prevent
          @dragover.prevent @dragstart.stop="dragstart($event, item)"
          @dragend.stop="dragEnd($event, item)">
          {{ item.Name}}
        </div>
      </div>
    </div>
    <div Klasse="MyShuttleCenter"></div>
    <div Klasse="MeinShuttleRechts">
      <div class="title">Datenquelle</div>
      <div ref="MyShuttleRight" class="dataBox">
        <div v-for="(item, i) in spaceList" :key="i" class="dataList" ziehbar @dragenter.prevent
          @dragover.prevent>
          {{ item.Name}}
        </div>
      </div>
    </div>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Name: '',
  Komponenten: {},
  Requisiten: {
    Datenursprung: {
      Typ: Array
    },
    Raum: {
      Typ: Array
    }
  },
  Daten() {
    zurückkehren {
      Raumliste: dieser.Raum,
      isDragStatus: false
    }
  },
  berechnet: {},
  betrachten: {},
  erstellt() { },
  montiert() { },
  Methoden: {
    dragleave(e, Element) {
      // konsole.log(e, Element)
      wenn (Element === 'Haupt') {
        this.isDragStatus = true
      } anders {
        this.isDragStatus = false
      }
      // konsole.log(dies.istDragStatus)
    },
    dragstart(e, Element) {
      // konsole.log(e, Element)
    },
    dragEnd(e, Element) {
      const top = this.$refs.MyShuttleRight.getBoundingClientRect().top
      const right = this.$refs.MyShuttleRight.getBoundingClientRect().right
      const bottom = this.$refs.MyShuttleRight.getBoundingClientRect().bottom
      const left = this.$refs.MyShuttleRight.getBoundingClientRect().left
      console.log(oben, rechts, unten, links)
      console.log(e.clientX, e.clientY, Element)
      if (this.isDragStatus && e.clientY > oben && e.clientY < unten && e.clientX > links && e.clientX < rechts) {
        this.spaceList.push(Element)
        Konsole.log(diese.spaceList.indexOf(Element))
      }
    }
  }
}
</Skript>

<style scoped lang="scss">
.MeinShuttle {
  Breite: 100 %;
  Höhe: 308px;

  Anzeige: Flex;
  Inhalt ausrichten: Abstand dazwischen;
  // Gemeinsamer Stil für linke und rechte Boxen.MyShuttleLeft,
  .MeinShuttleRechts {
    Rand: 1px durchgezogen #dddddd;
    Rahmen-Zusammenbruch: Zusammenbruch;
    .Titel {
      Box-Größe: Rahmenbox;
      Breite: 100 %;
      Höhe: 40px;
      Hintergrund: #f5f5f5;
      Rahmenradius: 4px 4px 0px 0px;
      Rahmen unten: 1px durchgezogen #dddddd;
      Polsterung: 10px 16px;
      Schriftgröße: 14px;
      Schriftfamilie: PingFangSC-Regular, PingFang SC;
      Schriftstärke: 400;
      Farbe: #333333;
      Zeilenhöhe: 20px;
    }
    .dataBox {
      Breite: 100 %;
      Höhe: 228px;
      Überlauf: automatisch;
      Polsterung: 6px 0;
      .Datenliste {
        Breite: 96%;
        Höhe: 40px;
        Box-Größe: Rahmenbox;
        Schriftgröße: 14px;
        Schriftfamilie: PingFangSC-Regular, PingFang SC;
        Schriftstärke: 400;
        Farbe: #666;
        Zeilenhöhe: 20px;
        Rand: 0,2 % 10px;
        Polsterung: 10px 16px;
        Rand: 1px durchgezogen #ddd;
        Rahmenradius: 4px;
        Benutzerauswahl: keine;
        Cursor: Zeiger;
        &:schweben {
          Farbe: #01bc77;
          Hintergrund: rgba(1, 188, 119, 0,1);
        }
      }
    }
  }
  .MeinShuttleLeft {
    Breite: 362px;
    Höhe: 100%;
    Hintergrund: #ffffff;
    Rahmenradius: 4px;
  }
  .MyShuttleCenter {
    Breite: 64px;
    Höhe: 100%;
  }
  .MeinShuttleRechts {
    Breite: 362px;
    Höhe: 100%;
    Hintergrund: #ffffff;
    Rahmenradius: 4px;
  }
}
</Stil>

Dies ist das Ende dieses Artikels über die einfache Implementierung der Vue-Drag-and-Drop-Ergänzung. Weitere relevante Inhalte zur Vue-Drag-and-Drop-Ergänzung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Implementierung einer Drag & Drop-Funktion basierend auf Vue
  • Drag-Effekt basierend auf Vue realisieren
  • So konfigurieren und verwenden Sie die Drag-Funktion von Vue.Draggable
  • Vue.Draggable realisiert den Drag-Effekt
  • Implementierung einer Drag & Drop-Sortierfunktion mit sanften Übergängen basierend auf Vue
  • Beispiel für eine benutzerdefinierte Drag-Funktion in Vue
  • Beispiel einer Drag & Drop-Funktion, die in vue2.0 mit Sortable.js implementiert wurde
  • Detaillierte Erläuterung des Beispiels einer verschiebbaren Baumtabelle basierend auf Vue
  • Vue entwickelt eine Drag-Fortschrittsbalken-Schiebekomponente

<<:  Das Laufschrift-Tag in HTML erzielt einen nahtlosen Laufschrift-Effekt

>>:  Erfahren Sie mehr über MySQL-Datenbanken

Artikel empfehlen

Erfahren Sie mehr über den MySQL-Ausführungsplan

Inhaltsverzeichnis 1. Einführung in den Implement...

Shell-Skripteinstellungen zum Verhindern von Brute-Force-SSH

Das Shell-Skript richtet die Zugriffskontrolle ei...

Tutorial zur Installation der DAMO-Datenbank auf Centos7

1. Vorbereitung Nach der Installation des Linux-B...

Ein kurzer Überblick über CSS3-Pseudoklassenselektoren

Vorwort Wenn CSS die Grundfertigkeit der Front-En...

Detaillierte Erläuterung des Falls des JavaScript-Upload-Dateilimitparameters

Projektszenario: 1. Einschränkungen beim Hochlade...

Web-Theorie: Bringen Sie mich nicht zum Nachdenken über Lesehinweise

Kapitel 1 <br />Das wichtigste Prinzip, um ...

VMware vsphere 6.5 Installationstutorial (Bild und Text)

vmware vsphere 6.5 ist die klassische Version der...

Beispiel für die Anpassung von rem an mobile Geräte

Vorwort Überprüfung und Zusammenfassung von REM-A...