Simple Drag and Drop
How do I make an simple drag and drop?
Custom Drag and Drop, not HTML5 drag and drop. What is a simple drag and drop? How do you make a simple drag and drop? This script and codes were developed by Event Horizon on 30 July 2022, Saturday.
Simple Drag and Drop - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Simple Drag and Drop</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"> <link rel="stylesheet" href="css/style.css">
</head>
<body> <script src="js/index.js"></script>
</body>
</html>
Simple Drag and Drop - Script Codes CSS Codes
.dragMe{ display:inline-block; position:absolute; width:256px; height:256px; border:1px solid #000; z-index:1; background-color:rgba(0,150,225,0.33); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer;
}
#dropTarget{ display:inline-block; position:absolute; width:1024px; height:256px; border:2px solid #000; margin-left:512px; vertical-align:top;
}
Simple Drag and Drop - Script Codes JS Codes
/* * * GOAL: create simple class/prototype to start drag and detect a target * RULES: no HTML5 drag/drop * NOTES: needs option to go by upper left or center (defaulting to center right now), need to make pulling out of droptarget have the correct positioning * */
document.addEventListener("DOMContentLoaded", function() { var dragObject = function(dragel, targetel, dropin) { var oldX, oldY, newX, newY, x, y, pressed = false, self=this; self.dropin = dropin || false; self.dragel = dragel || undefined; self.targetel = targetel || undefined; function startdrag(event) { //console.log("startdrag"); pressed = true; oldX = event.clientX; oldY = event.clientY; if(targetel){ if(dragel.parentNode===targetel||targetel.contains(dragel)){ dragel.style.top=newY; dragel.style.left=newX; oldX = newX; //turn new x into old x oldY = newY; } } drag(event); } function drag(event) { if (pressed) { //console.log("dragging"); self.dragged(); newX = event.clientX; //newX=mouse position x newY = event.clientY; if (!dragel.style.left) { //if style left doesn't exist x = dragel.offsetLeft; //x is left x } else { x = parseInt((dragel.style.left).slice(0, -2), 10); //x is last style.left, if it exists } if (!dragel.style.top) { y = dragel.offsetTop; } else { y = parseInt((dragel.style.top).slice(0, -2), 10); } if (dragel.style.position !== "absolute") { dragel.style.position = "absolute"; } if(targetel){ if (dragel.parentNode===targetel||targetel.contains(dragel)){ targetel.removeChild(dragel); document.body.appendChild(dragel); } } dragel.style.left = (x + newX - oldX) + "px"; //left x becomes x + new x(mouse position) - old x(old mouse position) dragel.style.top = (y + newY - oldY) + "px"; oldX = newX; //turn new x into old x oldY = newY; } } function drop(event) { //console.log("drop"); self.dropped(); pressed = false; if (detectTarget() && targetel && dropin) { //dragel.style.top = targetel.offsetTop + "px";//used to position exactly to top left corner of target //dragel.style.left = targetel.offsetLeft + "px";//used to position exactly to top left corner of target dragel.style.position="static";//if this is set to relative it will use top/left still targetel.appendChild(dragel); } } function detectTarget() { if (targetel) { //need to know targetel top, left, width, height, top to height = vertical area, left to width = horizontal area var telMaxdown = targetel.offsetTop + targetel.offsetHeight, telMaxright = targetel.offsetLeft + targetel.offsetWidth, delCenterT = dragel.offsetHeight / 2, delCenterL = dragel.offsetWidth / 2; if (dragel.offsetTop + delCenterT <= telMaxdown && dragel.offsetTop + delCenterT >= targetel.offsetTop) { if (dragel.offsetLeft + delCenterL <= telMaxright && dragel.offsetLeft + delCenterL >= targetel.offsetLeft) { return true; } } else { return false; } } } this.dragged = function() { }; //function for setting up a callback to be run this.dropped = function() { }; //function for setting up a callback to be run this.removeDrag=function(){ document.removeEventListener("mousemove",drag); dragel.removeEventListener("mousedown", startdrag); document.removeEventListener("mouseup", drop); return dragel; }; function init() { document.addEventListener("mousemove", drag); dragel.addEventListener("mousedown", startdrag); document.addEventListener("mouseup", drop); return self; } init(); }; //SETUP/USAGE var mydiv = document.createElement("div"); mydiv.className="dragMe"; mydiv.innerHTML="DRAG ME1"; var mydiv2 = document.createElement("div"); mydiv2.className="dragMe"; mydiv2.innerHTML="DRAG ME2"; var mydiv3 = document.createElement("div"); mydiv3.className="dragMe"; mydiv3.innerHTML="DRAG ME3"; var targetDiv = document.createElement("div"); targetDiv.id="dropTarget"; document.body.appendChild(mydiv); document.body.appendChild(mydiv2); document.body.appendChild(mydiv3); document.body.appendChild(targetDiv); var drag1 = new dragObject(mydiv, targetDiv, true); var drag2 = new dragObject(mydiv2, targetDiv, true); var drag3 = new dragObject(mydiv3, targetDiv, true); drag3.dropped=function(){ this.dragel.innerHTML="dropped!"; }; drag3.dragged=function(){ this.dragel.innerHTML="dragged!"; };
});
Developer | Event Horizon |
Username | Event_Horizon |
Uploaded | July 30, 2022 |
Rating | 3 |
Size | 3,208 Kb |
Views | 36,432 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Window Designing | 5,766 Kb |
Very Animated Loading Bar | 2,246 Kb |
Content Panels | 2,189 Kb |
Textbox Memory | 3,912 Kb |
Comment Chains | 12,607 Kb |
XLSX and Vuejs | 3,788 Kb |
KSP altimeter | 3,150 Kb |
Confetti | 3,734 Kb |
Pure CSS mail icon | 1,776 Kb |
Mastermind Word Game | 2,815 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Simple DevTools | Deegill | 2,511 Kb |
Bubble animation | Ftabor | 6,565 Kb |
Spilled Paint | Darrylhuffman | 3,894 Kb |
Underlined form fields | Mitchdot | 2,323 Kb |
Modal Dialog | Gigaleet | 2,251 Kb |
Compare resources on mobile sites | Gyusza | 3,226 Kb |
Resizable SASS Icons | Marianarlt | 7,611 Kb |
Scifi-style Radio-based Tab | Aaronchuo | 4,427 Kb |
Loading animation | Hafizfattah | 0 Kb |
A Pen by John Malc | F789gh | 1,420 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!