Comment faire ?

Glisser et lâcher

( Drag and drop )

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));
  }