Implementierungscode für die HTML-Drag & Drop-Funktion

Implementierungscode für die HTML-Drag & Drop-Funktion

Basierend auf Vue

Die Kernidee dieser Funktion besteht darin, den linken und oberen Rand des Knotens auf der Seite über JavaScript-Code zu steuern. Unterschiedliche Stilpositionierungsmethoden haben unterschiedliche Lösungen.

Diese Lösung übernimmt position: absolute Positionierungslösung

Kerncode im CSS-Stil

// Breite des Kernstils des übergeordneten Containers: 100 %;
  Höhe: 100%;
//Position des Kernstils des Untercontainers: absolut;
  oben: 50 %;
  links: 50%;
  transformieren: übersetzen(-50 %,-50 %);

Der übergeordnete Container nimmt über die Felder width && height den gesamten sichtbaren Bereich des Browsers ein, und der untergeordnete Container ermöglicht über position: absolute “ die absolute Positionierung innerhalb des übergeordneten Containers und steuert die absolute Position des untergeordneten Containers innerhalb des übergeordneten Containers über top && left && transform: translate(-50%, -50%) .

JavaScript-Kerncode zur Logiksteuerung

Lassen Sie uns zunächst die Schritte und entsprechenden Ereignisse aufschlüsseln, die zur Knotenbewegung erforderlich sind.

  • Wenn ein untergeordneter Container erstellt wird, wird er absolut innerhalb des übergeordneten Containers positioniert.
  • Wenn die Maustaste gedrückt wird, wird das Ereignis onmousedown
  • Wenn sich die Maus bewegt, onmousemove-Ereignis
  • Wenn die Maustaste losgelassen wird, wird das Ereignis onmouseup

Solange Sie die drei Ereignisse onMousedown, onMousemove und onMouseup verwenden, können Sie die einfachste Bewegung erreichen

/*
* Ermitteln Sie die obere und linke Position des untergeordneten Containers relativ zum übergeordneten Container, wenn der untergeordnete Container erstellt wird */

montiert () {
  dies.links = dies.$refs.fatherBox.offsetLeft
  dies.oben = dies.$refs.fatherBox.offsetTop
}
/*
* Wenn die Maus gedrückt wird* 1. Aktivieren Sie das Flag, das es untergeordneten Containern ermöglicht, sich zu bewegen
* 2. Notieren Sie die Standortinformationen, wenn mit der Maus geklickt wird*/

Maus nach unten (e) {
  // Setzen Sie das Flag, um das Bewegen des Popup-Fensters zu ermöglichen
  this.moveFlag = wahr
  // Startposition der Maus speichern this.startLeft = e.clientX - this.left
  this.startTop = e.clientY - this.top
}
/*
* Wenn sich die Maus bewegt * 1. Bestimmen Sie, ob die Flagge die Bewegung des untergeordneten Containers zulässt * 2. Legen Sie die linke Position des Popup-Fensters fest * 3. Legen Sie die rechte Position des Popup-Fensters fest * /

bewegen (e) {
  //Überprüfen, ob die Flagge eine Bewegung zulässt, wenn (!this.moveFlag) return

  // Linke Position der Bullet-Box festlegen this.left = e.clientX - this.startLeft
  // Richtige Position der Bulletbox festlegen this.top = e.clientY - this.startTop

}
/*
* Wenn die Maustaste losgelassen wird* 1. Deaktivieren Sie das Flag, das das Verschieben von untergeordneten Containern ermöglicht
*/

Maus hoch (e) {
  this.flag = falsch
}

Mit diesen Methoden können Sie die oberen und linken Offsets der Maus abrufen, wenn die Maus gedrückt und bewegt wird. Indem Sie diesen Offset der übergeordneten Komponente zugänglich machen, legt die übergeordnete Komponente die oberen und linken Werte der untergeordneten Komponente in Echtzeit fest, damit der untergeordnete Container der Bewegung der Maus folgt.

Code der übergeordneten Komponente

Die übergeordnete Komponente legt die Ref- und ZIndex-Werte der untergeordneten Komponente fest, und die BackValue-Methode der übergeordneten Komponente empfängt den ZIndex-Wert von der untergeordneten Komponente und verwendet den ZIndex, um die spezifische Instanz der untergeordneten Komponente zu identifizieren.

/*
* Codeausschnitt der übergeordneten Komponente, JSX-Version */

Standard exportieren {
  Requisiten: {
    Wiedergabeliste: {
      Typ: Array,
      erforderlich: true
    }
  },
  rendern () {
    zurückkehren (
      <div Stil={{Breite: '100%', Höhe: '100%'}} ref={'Vater'}>
        {
          diese.playList und diese.playList.map((item, index) => {
            zurückkehren (
              <Untergeordnete Komponenten
                Schlüssel={index}
                ref={index}
                zIndex={index}
                sichtbar={true}
                zurückWert={dieser.zurückWert}
                info={Artikel}
                Breite={600}
                Höhe={400}
              />
            )
          })
        }
      </div>
    )
  },
  Methoden: {
    backValue (links, oben, zIndex) {
      dies.$refs[zIndex].$el.style.top = `${top}px`
      dies.$refs[zIndex].$el.style.left = `${left}px`
    }
  }
}
<!-- VUE-Dateiversion des Codeausschnitts der übergeordneten Komponente -->

<Vorlage>
  <div
    ref="Vater"
    Stil „Breite: 100 %, Höhe: 100 %“
  >
    <Untergeordnete Komponenten
      v-for="(Element, Index) in Wiedergabeliste"
      :Schlüssel="Index"
      :ref="Index"
      :sichtbar="wahr"
      :z-index="Index"
      :back-value="ZurückWert"
      :info="Artikel"
      :close="schließen"
      :Breite="600"
      :Höhe="400"
    />
  </div>
</Vorlage>
<Skript>
Standard exportieren {
  Komponenten:
    VideoPlayerModal
  },
  Requisiten: {
    Wiedergabeliste: {
      Typ: Array,
      erforderlich: true
    }
  },
  Methoden: {
    backValue (links, oben, zIndex) {
      dies.$refs[zIndex][0].$el.style.top = `${top}px`
      dies.$refs[zIndex][0].$el.style.left = `${left}px`
    }
  }
}
</Skript>

Legen Sie den Zaunbereich der untergeordneten Komponente fest

Diese Funktion muss lediglich feststellen, ob sich die Ober- und die linke Seite des untergeordneten Containers im Ereignis onmousemove außerhalb des sichtbaren Bereichs des Browsers befinden.

/*
* 1. this.width-Daten sind der Breitenwert, der von der übergeordneten Komponente übergeben wird, oder der Standardwert, der von der untergeordneten Komponente selbst festgelegt wird.* 2. this.height-Daten sind der Höhenwert, der von der übergeordneten Komponente übergeben wird, oder der Standardwert, der von der untergeordneten Komponente selbst festgelegt wird.*/

bewegen (e) {
  //Überprüfen, ob die Flagge eine Bewegung zulässt, wenn (!this.moveFlag) return

  // Bestimmen Sie, ob es die linke Ansicht überschreitet, wenn (this.$refs.fatherBox.offsetLeft < this.width / 2) {
        // Deaktivieren Sie das Verschieben des Popup-Fensters. this.moveFlag = false
        // Linke Position der Bulletbox festlegen this.left = this.width / 2 + 10
        // Rufen Sie die Rückruffunktion auf, um den Offset für die übergeordnete Komponente this.backValue(this.left, this.top, this.zIndex) verfügbar zu machen.
        zurückkehren
      }

      // Bestimmen Sie, ob es die rechte Ansicht überschreitet, wenn (this.$refs.fatherBox.offsetLeft > document.body.clientWidth - this.width / 2) {
        // Deaktivieren Sie das Verschieben des Popup-Fensters. this.moveFlag = false
        // Richtige Position der Bulletbox festlegen this.left = document.body.clientWidth - this.width / 2 - 10
        // Rufen Sie die Rückruffunktion auf, um den Offset für die übergeordnete Komponente this.backValue(this.left, this.top, this.zIndex) verfügbar zu machen.
        zurückkehren
      }

      // Bestimmen Sie, ob es die Draufsicht überschreitet, wenn (this.$refs.fatherBox.offsetTop < this.height / 2 + 70) {
        // Deaktivieren Sie das Verschieben des Popup-Fensters. this.moveFlag = false
        // Obere Position der Bullet-Box festlegen this.top = this.height / 2 + 70 + 10
        // Rufen Sie die Rückruffunktion auf, um den Offset für die übergeordnete Komponente this.backValue(this.left, this.top, this.zIndex) verfügbar zu machen.
        zurückkehren
      }

      // Bestimmen Sie, ob es die untere Ansicht überschreitet, wenn (this.$refs.fatherBox.offsetTop > document.body.clientHeight - this.height / 2 - 50) {
        // Deaktivieren Sie das Verschieben des Popup-Fensters. this.moveFlag = false
        // Untere Position der Bullet-Box festlegen this.top = document.body.clientHeight - this.height / 2 - 50 - 10
        // Rufen Sie die Rückruffunktion auf, um den Offset für die übergeordnete Komponente this.backValue(this.left, this.top, this.zIndex) verfügbar zu machen.
        zurückkehren
      }

      // Linke Position der Bullet-Box festlegen this.left = e.clientX - this.startLeft
      // Richtige Position der Bulletbox festlegen this.top = e.clientY - this.startTop

      // Rufen Sie die Rückruffunktion auf, um den Offset für die übergeordnete Komponente this.backValue(this.left, this.top, this.zIndex) verfügbar zu machen.
}

Um unerwartete Fehler zu vermeiden, muss die Unterkomponente außerdem ein Onmouseout-Ereignis festlegen, wenn die Maus den Untercontainer überschreitet.

Mauszeiger (e) {
  this.moveFlag = falsch
}

Dies ist das Ende dieses Artikels über die HTML-Drag-and-Drop-Funktion. Weitere relevante Inhalte zur HTML-Drag-and-Drop-Funktion finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

<<:  CSS-Tipps zur Implementierung der Chrome-Tab-Leiste

>>:  Mehrere Möglichkeiten zur Implementierung eines zweispaltigen Layouts mit fester Breite links und adaptiver Breite rechts mithilfe von CSS

Artikel empfehlen

Vier Möglichkeiten, CSS und HTML zu kombinieren

(1) Jedes HTML-Tag hat ein Attribut style, das CS...

Einführung in HTML für Frontend-Entwickler

1 Einführung in HTML 1.1 Erste Erfahrungen mit Co...

Vue verwendet Echarts, um ein dreidimensionales Balkendiagramm zu implementieren

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

Beispieloperation MySQL Kurzlink

So richten Sie einen MySQL-Kurzlink ein 1. Überpr...

CentOS 7.x-Bereitstellung von Master- und Slave-DNS-Servern

1. Vorbereitung Beispiel: Zwei Maschinen: 192.168...

MySQL-Experiment: Verwenden von Explain zur Analyse des Indextrends

Überblick Die Indizierung ist eine Fähigkeit, die...

jquery+springboot realisiert die Datei-Upload-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Bedingte Kommentare zur Bestimmung des Browsers (IE-Reihe)

<!--[if IE 6]> Nur IE6 kann erkennen <![e...

Methode zur Änderung des MySQL-Kontokennworts (Zusammenfassung)

Vorwort: Bei der täglichen Verwendung der Datenba...

JavaScript zum Erreichen einer festen Seitenleiste

Verwenden Sie Javascript, um eine feste Seitenlei...

Beispieltest MySQL-Enumerationstyp

Bei der Entwicklung eines Projekts stößt man häuf...

So installieren Sie pyenv unter Linux

Voraussetzungen Git muss installiert werden Insta...

So verwenden Sie MySQL zur Abdeckung von Index- und Tabellenrückgabe

Zwei Hauptkategorien von Indizes Verwendete Speic...