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

Docker Gitlab+Jenkins+Harbor erstellt einen persistenten Plattformbetrieb

CI/CD-Übersicht CI-Workflow-Design Das Git-Codeve...

Verwenden Sie JS, um Dateien zu bearbeiten (FileReader liest --node's fs)

Inhaltsverzeichnis JS liest Datei FileReader doku...

Mit JS in zehn Minuten die Existenz von Elementen in einem Array bestimmen

Vorwort In der Front-End-Entwicklung müssen Sie h...

Warum node.js nicht für große Projekte geeignet ist

Inhaltsverzeichnis Vorwort 1. Anwendungskomponent...

Auszeichnungssprache – CSS-Stil für Webanwendungen

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

So installieren Sie einen SVN-Server unter Linux

1. Yum-Installation yum installiere Subversion 2....

Vue-Element el-transfer fügt Drag-Funktion hinzu

Das Core Asset Management Project erfordert, dass...

Anwendung der MapState-Idee in Vuex

Inhaltsverzeichnis 1. Kartenmethode 2. Anwendung ...

jQuery implementiert ein atmendes Karussell

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

Implementierung der virtuellen React-Liste

Inhaltsverzeichnis 1. Hintergrund 2. Was ist eine...