Перейти к основному содержимому

HTML API для Drag and Drop

API HTML Drag and Drop позволяет перетаскивать элемент.


Перетаскивание (Drag and Drop)

Перетаскивание — очень распространённая функция. Это когда вы «хватаете» объект и перетаскиваете его в другое место.


Поддержка браузерами

Drag and Drop поддерживается всеми современными браузерами (начиная с Chrome 4, Edge 9, Firefox 3.5, Safari 6 и Opera 12).


Пример API HTML Drag and Drop

Вот простой пример перетаскивания: перетаскиваемое изображение и целевой div.

Пример

Перетаскивание изображения в div.

Prompt
Демонстрация перетаскивания: перетаскиваемое изображение и целевой div, с использованием ondragstart/setData, ondragover/preventDefault и ondrop для перемещения изображения в div.
Результат: полная HTML-страница

Сделать элемент перетаскиваемым

Сначала, чтобы сделать элемент перетаскиваемым, установите его атрибут draggable в true. Это работает для любого элемента, например изображения или абзаца.

Перетаскиваемое изображение

Изображение, сделанное перетаскиваемым.

index.html
<img id="img1" draggable="true">

Перетаскиваемый абзац

Абзац, сделанный перетаскиваемым.

index.html
<p id="p1" draggable="true">Draggable text</p>

Что перетаскивать - ondragstart и setData()

Далее укажите, что происходит при перетаскивании элемента. Атрибут ondragstart элемента вызывает функцию (здесь dragstartHandler), которая задаёт перетаскиваемые данные. Метод dataTransfer.setData() задаёт тип и значение данных; в примере тип — «text», а значение — id перетаскиваемого элемента.


Куда сбрасывать - ondragover

Атрибут ondragover целевого элемента вызывает функцию (здесь dragoverHandler), которая указывает, куда можно сбросить данные. По умолчанию данные нельзя сбрасывать в другие элементы, поэтому, чтобы разрешить сброс, нужно вызвать preventDefault() для события ondragover.


Выполнение сброса - ondrop

Когда перетаскиваемые данные сбрасываются, возникает событие drop. Атрибут ondrop цели вызывает функцию (здесь dropHandler), которая: вызывает preventDefault(), чтобы остановить стандартное поведение браузера (открытие данных как ссылки), получает перетаскиваемые данные с помощью dataTransfer.getData() (id перетаскиваемого элемента) и добавляет перетаскиваемый элемент в цель сброса.


Больше примеров

Те же обработчики могут перетаскивать другие виды элементов в div или перемещать изображение туда-обратно между двумя div-ами.

Перетаскивание h1 в div

Перетаскивание заголовка в div.

Prompt
Демонстрация перетаскивания, которая перетаскивает заголовок h1 (PromptCookbook) в целевой div, используя те же обработчики dragstart, dragover и drop.
Результат: полная HTML-страница

Перетаскивание ссылки в div

Перетаскивание ссылки в div.

Prompt
Демонстрация перетаскивания (drag-and-drop), которая перетаскивает ссылку (элемент a на PromptCookbook.com) в целевой div, используя те же обработчики dragstart, dragover и drop.
Результат: полная HTML-страница

Перетаскивание туда-обратно между двумя div-ами

Перемещение изображения между двумя div-ами.

Prompt
Демонстрация перетаскивания с двумя целевыми div, между которыми изображение можно перетаскивать туда и обратно, используя общие обработчики dragstart, dragover и drop.
Результат: полная HTML-страница