JSFiddle - React, Tailwind, and code Playground
by core972
HTML
<div class="dropzone">
<div
id="draggable"
draggable="true"
ondragstart="event.dataTransfer.setData('text/plain',null)">
Cette div peut être glissée
</div>
</div>
<div class="dropzone"></div>
<div class="dropzone"></div>
<div class="dropzone"></div>
CSS
#draggable {
width: 200px;
height: 20px;
text-align: center;
background: white;
}
.dropzone {
display: inline-block;
width: 200px;
height: 20px;
background: blueviolet;
margin-bottom: 10px;
padding: 10px;
}
JavaScript
var dragged;
/* Les événements sont déclenchés sur les objets glissables */
document.addEventListener("drag", function (event) {}, false);
document.addEventListener(
"dragstart",
function (event) {
// Stocke une référence sur l'objet glissable
dragged = event.target;
// transparence 50%
event.target.style.opacity = 0.5;
},
false,
);
document.addEventListener(
"dragend",
function (event) {
// réinitialisation de la transparence
event.target.style.opacity = "";
},
false,
);
/* Les événements sont déclenchés sur les cibles du drop */
document.addEventListener(
"dragover",
function (event) {
// Empêche le comportement par défaut afin d'autoriser le drop
event.preventDefault();
},
false,
);
document.addEventListener(
"dragenter",
function (event) {
// Met en surbrillance la cible de drop potentielle lorsque l'élément glissable y entre
if (event.target.className == "dropzone") {
event.target.style.background = "purple";
}
},
false,
);
document.addEventListener(
"dragleave",
function (event) {
// réinitialisation de l'arrière-plan des potentielles cible du drop lorsque les éléments glissables les quittent
if (event.target.className == "dropzone") {
event.target.style.background = "";
}
},
false,
);
document.addEventListener(
"drop",
function (event) {
// Empêche l'action par défaut (ouvrir comme lien pour certains éléments)
event.preventDefault();
// Déplace l'élément traîné vers la cible du drop sélectionnée
if (event.target.className == "dropzone") {
event.target.style.background = "";
dragged.parentNode.removeChild(dragged);
event.target.appendChild(dragged);
}
},
false,
);