Das Prinzip und die Implementierung des JS-Drag-Effekts

Das Prinzip und die Implementierung des JS-Drag-Effekts

Die Drag-Funktion wird hauptsächlich verwendet, um Benutzern die Durchführung bestimmter benutzerdefinierter Aktionen zu ermöglichen, wie z. B. Ziehen zum Sortieren, Ziehen und Verschieben von Popup-Fenstern usw.

Drag-and-Drop-Prozessaktionen

1. Durch Drücken der Maus wird das Ereignis onmousedown ausgelöst

2. Mausbewegung löst das Ereignis onmousemove aus

3. Das Loslassen der Maus löst das Ereignis onmouseup aus

Widerstandsprinzip

1. Maus drücken + Maus bewegen = ziehen-------Ereignis bei Mausklick + bei Mausbewegung

2. Lassen Sie die Maus los = kein Ziehen -------- Beenden Sie das Ziehen bei Mauszeiger hoch

3. Mausversatz = Ziehdistanz

Zeichnen Sie beim Klicken auf das DOM die aktuellen Mauskoordinaten auf, d. h. die x- und y-Werte sowie die oberen und linken Werte des gezogenen DOM, und fügen Sie der Rückruffunktion für gedrückte Maus ein Mausbewegungsereignis hinzu:

document.addEventListener("mousemove", verschieben, false)

Und fügen Sie das Mouse-Up-Ereignis hinzu

document.addEventListener("mouseup",Funktion() {
document.removeEventListener("mousemove", verschieben, false);
}, FALSCH);

Dieses Anhebeereignis wird verwendet, um die Überwachung der Mausbewegung abzubrechen, da das Ziehen nur erfolgen kann, wenn die Maus gedrückt wird, und die Bewegung beendet wird, wenn sie angehoben wird.

Wenn die Maus gedrückt und bewegt wird, werden die x- und y-Werte der Bewegung aufgezeichnet. Anschließend lauten die oberen und linken Werte des gezogenen DOM:
top = der höchste Wert des DOM, der beim Drücken der Maus aufgezeichnet wird + (y-Wert während der Bewegung – y-Wert beim Drücken der Maus)
links = der linke Wert des DOM, der beim Drücken der Maus aufgezeichnet wird + (x-Wert während der Bewegung – x-Wert beim Drücken der Maus);

//Extrem einfache Version var div = document.querySelector("div");
    // Beim Drücken mit dem Warten auf Mausbewegungsereignisse im Dokument beginnen // Beim Loslassen der Maus mit dem Warten beginnen // Ziehen nur beim Drücken vorbereiten div.onmousedown=function(e1){
        // Wenn sich die Maus im Dokument bewegt, kann sie sich nicht auf dem div bewegen, da die Maus das div verlassen könnte, wodurch es unmöglich würde, das div zu ziehen.onmousemove=function(e){
            // Wenn sich die Maus bewegt, werden die aktuellen Mauskoordinaten relativ zum Ansichtsfenster links und oben im Element zugewiesen
            // Da wir an der gedrückten Position ziehen müssen, müssen wir auch die Position der oberen linken Ecke der Maus relativ zum Div ermitteln, wenn die Taste gedrückt wird. // Aktuelle Mausposition abzüglich der Position der oberen linken Ecke des relativen Elements verwenden, um sicherzustellen, dass die Maus an der gedrückten Position gezogen wird. div.style.left=e.clientX-e1.offsetX+"px";
            div.style.top=e.clientY-e1.offsetY+"px";
        }
        // Wenn die Maustaste losgelassen wird, lösche das Mausbewegungsereignis und lösche das Mausloslassenereignis div.onmouseup=function(){
            Dokument.onmousemove=null;
            Dokument.onmouseup=null;
        }
    }

//Einfache Version var div = document.querySelector("div");
    var OffsetX, OffsetY;
    div.addEventListener("mousedown",mouseDownHandler);

    Funktion mouseDownHandler(e){
        offsetX=e.offsetX
        offsetY=e.offsetY
        document.addEventListener("Mausbewegung",MausbewegungsHandler)
        document.addEventListener("mouseup",mouseupHandler)
    }

    Funktion MausbewegungsHandler(e){
        div.style.left=e.clientX-offsetX+"px"
        div.style.top=e.clientY-offsetY+"px"
    }

    Funktion mouseupHandler(e){
        document.removeEventListener("Mausbewegung",MausbewegungsHandler)
        document.removeEventListener("mouseup",mouseupHandler)
    }

// Einfache aktualisierte Version var div = document.querySelector ("div");
    var OffsetX, OffsetY;
    div.addEventListener("Maus gedrückt",MausHandler);

    Funktion MausHandler(e){
        wenn(e.type==="mousedown"){
            offsetX=e.offsetX;
            offsetY=e.offsetY;
            document.addEventListener("Mausbewegung",MausHandler)
            document.addEventListener("Maus hoch",MausHandler)
        }sonst wenn(e.type==="mousemove"){
            div.style.left=e.clientX-offsetX+"px"
            div.style.top=e.clientY-offsetY+"px"
        }sonst wenn(e.type==="mouseup"){
            document.removeEventListener("Mausbewegung",MausHandler)
            document.removeEventListener("Maus hoch",MausHandler)
        }
}

Notiz

a. Der Stil des gezogenen Elements muss auf eine absolute oder relative Position eingestellt werden, um wirksam zu sein.
b. Ziehen Sie es per Drag & Drop in das Dokument, da sich der Inhalt sonst löst

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:
  • JQuery-Dialog (JS-Modalfenster, verschiebbares DIV)
  • Analyse der Verwendung der Drag & Drop-Sortierung von Sortable.js
  • js, um einen Drag-Effekt zu erzielen
  • JavaScript implementiert die Touchscreen-Drag-Funktion auf mobilen Endgeräten
  • Einfacher Drag-Effekt mit js implementiert
  • JS realisiert einen schönen Fenster-Drag-Effekt (Größe kann geändert, maximiert, minimiert, geschlossen werden)
  • Beispiel einer Drag-and-Drop-Upload-Funktion für Dateien, die von JS implementiert wurde
  • Verwenden von Javascript zum Implementieren von Maus-Drag-Ereignissen
  • Implementierungscode für den Drag-Effekt der JS-Komponente Bootstrap Table Table
  • JavaScript implementiert den horizontalen Fortschrittsbalken-Drag-Effekt

<<:  Detaillierte Erläuterung verschiedener Fehlerbehandlungen, wenn Nginx nicht gestartet werden kann

>>:  So implementieren Sie eine geplante Sicherung von MySQL unter Linux

Artikel empfehlen

Erläuterung der Konfiguration und Verwendung der MySQL-Speicher-Engine InnoDB

MyISAM und InnoDB sind die gängigsten Speicher-En...

MySQL 5.7.17 neuestes Installationstutorial mit Bildern und Text

mysql-5.7.17-winx64 ist die neueste Version von M...

So paginieren Sie schnell MySQL-Datenmengen im zweistelligen Millionenbereich

Vorwort Um bei der Backend-Entwicklung zu verhind...

So verwenden Sie React zur Implementierung einer Bilderkennungs-App

Lassen Sie mich Ihnen zuerst das Effektbild zeige...

Zusammenfassung der Anwendungspraxis für Docker-Container des Node.js-Dienstes

In diesem Artikel wird die Verwendung und Install...

Vue verwendet Canvas, um den Bildkomprimierungs-Upload zu realisieren

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

So installieren Sie JDK und Mysql auf dem Linux-System Ubuntu 18.04

Plattformbereitstellung 1. JDK installieren Schri...

React erhält den Eingabewert und übermittelt 2 Methodenbeispiele

Methode 1: Verwenden Sie das Zielereignisattribut...

Lösung für das Problem des MySQL-Datenverzögerungssprungs

Heute haben wir ein weiteres typisches Problem im...

Einfaches Beispiel für die Verwendung eines Docker-Containers

Inhaltsverzeichnis 1. Ziehen Sie das Bild 2. Ausf...