HTML5 Drag and Drop

Перетащите с помощью мыши изображение W3Schools из одного прямоугольника в другой прямоугольник.
Drag and Drop - Перетянуть и кинуть
Drag and Drop - дословный перевод с английского языка - 'Перетянуть и кинуть'
Перетягивание (Drag and drop) - очень распространённая функция. Это когда вы 'захватываете' мышкой объект и перетягиваете его в другое место.
В HTML5 перетягивание является частью стандарта: любой элемент может быть перетянутым. Для этого используется JavaScript.
Поддержка браузерами
Цифры в таблице определяют первую версию браузера, которая полностью поддерживает перетягивание (Drag and Drop).
| API | |||||
|---|---|---|---|---|---|
| Drag and Drop | 4.0 | 9.0 | 3.5 | 6.0 | 12.0 | 
HTML Drag and Drop Пример
Ниже приведён пример простого перетягивания:
Пример
        <!DOCTYPE HTML>
        <html>
        <head>
        <script>
        function allowDrop(ev)
        {
          ev.preventDefault();
        }
        
        function drag(ev)
        {
         
        ev.dataTransfer.setData("text", ev.target.id);
        }
        
        function drop(ev)
        {
         
        ev.preventDefault();
          var data = ev.dataTransfer.getData("text");
          ev.target.appendChild(document.getElementById(data));
        }
        </script>
        </head>
        <body>
        
        <div id="div1" ondrop="drop(event)"
        ondragover="allowDrop(event)"></div>
        
        <img id="drag1" src="img_logo.gif" draggable="true"
        ondragstart="drag(event)" width="336" height="69">
        
        </body>
        </html>
      Попробуйте сами »Это может показаться сложным, но давайте рассмотрим все разные части перетягивания.
Создать элемент для перетягивания
Прежде всего: Чтобы сделать элемент перетягиваемым, установите атрибут draggable на true (истина):
        <img draggable="true">
    Чтобы перетянуть - ondragstart и setData()
Потом укажите, что должно произойти, когда элемент перетягивается.
В приведённом выше примере атрибут ondragstart вызывает функцию drag(event), которая указывает, какие данные необходимо перетягивать.
Метод dataTransfer.setData() устанавливает тип данных и значения перетягиваемых данных:
      
        function drag(ev) {
  ev.dataTransfer.setData("text", ev.target.id);
        }
      
    В этом случае тип данных - 'text', а значение - id элемента перетягивания ('drag1').
Куда кинуть перетянувши - ondragover
Событие ondragover указывает, куда можно перетянуть и скинуть данные.
По умолчанию данные/элементы не могут быть скинуты в другие элементы. Чтобы позволить скидывание, мы должны предотвратить обработку элемента по умолчанию.
Это делается путём вызова метода event.preventDefault() для ondragover события:
      
        event.preventDefault()
    
    Произвести скидывание - ondrop
Когда вытягиваются перетягиваемые данные, происходит событие скидывания.
В приведённом выше примере атрибут ondrop вызывает функцию drop(event):
      
        function drop(ev)
        {
         
        ev.preventDefault();
         
        var data = ev.dataTransfer.getData("text");
         
        ev.target.appendChild(document.getElementById(data));
        }
    
    Объяснение кода:
- Вызвать функцию preventDefault(), чтобы запретить обработку данных по умолчанию браузером (по умолчанию открывается как ссылка при скидывании);
- Получить перетянутые данные с помощью метода dataTransfer.getData(). Этот метод возвратит любые данные, которые были установлены в том же типе в методе setData();
- Перетянутые данные - это id перетянутого элемента ('drag1');
- Добавьте перетянутый элемент в элемент drop.
Больше примеров
Перетяните с помощью мышки изображение вперёд и назад
Как перетянуть (и скинуть) изображение вперёд и назад между двумя элементами <div> (с одного прямоугольника в другой):

 
        