Drag’n’Drop. Как реализовать перетаскивание элементов в браузере?

Drag & drop может понадобиться в разных ситуациях — например, в таких:

  1. Простое визуальное изменение положения элемента.
  2. Сортировка элементов с помощью перетаскивания. Пример — сортировка карточек задач в таск-трекере.
  3. Изменение контекста элемента. Пример — перенос задачи в таск трекере из одного списка в другой.
  4. Перемещение локальных файлов в окно браузера.

HTML Drag and Drop API
В стандарте HTML5 есть API, который позволяет реализовать эффект drag & drop. Он даёт возможность с помощью специальных событий контролировать захват элемента на странице мышью и его перемещение в новое положение.

По умолчанию перемещаться могут только ссылки, изображения и выделенные фрагменты. Если начать перетаскивать их, появится фантомная копия, которая будет следовать за курсором. Чтобы добавить возможность перетаскивания другим элементам, нужно задать атрибуту draggable значение true.

Draggable element

Для реализации перемещения используется ряд событий, которые срабатывают на разных этапах. Основные из них:

drag — срабатывает каждые несколько сотен миллисекунд, пока элемент перетаскивается.
dragstart — срабатывает в момент начала перетаскивания элемента.
dragend — срабатывает в момент, когда перетаскивание элемента завершено.
dragover — срабатывает каждые несколько сотен миллисекунд, пока перетаскиваемый элемент находится над зоной, в которую может быть сброшен.
drop — срабатывает в тот момент, когда элемент будет брошен, если он может быть перемещён в текущую зону.