Code HTML :
<p><input class="js-controlled-input" value="mon texte" readonly="readonly"/>
<input class="js-target"/></p>
Code JS :
/* Pour déplacer un texte (pure JS).
Source = https://jsfiddle.net/91o9mpaz/4/ */
const inputElement = document.querySelector(".js-controlled-input");
preventDragNDropChangesOn(inputElement);
function preventDragNDropChangesOn(inputElement) {
let previousValue = inputElement.value;
let isDragged = false;
let wasDropped = false;
/*
* event order:
* dragstart (prepare for possible text cutting)
* drop (input text was not cut out yet at this point, so we can save it to revert it later)
* change (input text is already cut out at this point - revert it to the previous value)
* dragend (revert variables to initial state)
*/
inputElement.addEventListener('dragstart', () => isDragged = true);
document.body.addEventListener('drop', () =>
(wasDropped = isDragged) && (previousValue = inputElement.value));
inputElement.addEventListener('change', (e) =>
isDragged && wasDropped && (e.target.value = previousValue));
inputElement.addEventListener('dragend', () => isDragged = wasDropped = false);
}
Code HTML :
<img id="drag1" draggable="true" ondragstart="drag(event)"
src="../avatarHo.png" width="50" height="50" alt="" />
<div id="drop1" ondragover="allowDrop(event)" ondrop="drop(event)" style=
"width:50px;height:50px;border:1px solid"></div>
Tout élément HTML peut faire l'objet d'un glisser-lâcher.
La première chose à faire d'indiquer que l'élément est draggable :
draggable="true". La seconde est de donner une fonction comme
valeur de l'attribut ondragstart : ondragstart="drag(event)"
La troisième chose à faire d'indiquer que l'élément autorisé à recevoir :
ondragover="allowDrop(event)". La quatrième est de donner une
fonction comme valeur de l'attribut ondrop : ondrop="drop(event)"
Code JS :
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function allowDrop(ev) {
ev.preventDefault();
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}