Сложные интерактивы: drag-and-drop
«Канбан», «менеджер файлов», «редактор» — всё это сложные интерактивы. Разбираем перетаскивание, вставку из буфера и горячие клавиши.
HTML5 Drag and Drop
card.draggable = true;
card.addEventListener("dragstart", (e) =>
e.dataTransfer.setData("text/id", card.id));
column.addEventListener("dragover", (e) => e.preventDefault());
column.addEventListener("drop", (e) => {
const id = e.dataTransfer.getData("text/id");
column.append(document.getElementById(id));
});
Буфер обмена и hotkeys
input.addEventListener("paste", (e) => {
for (const f of e.clipboardData.files) upload(f);
});
document.addEventListener("keydown", (e) => {
if (e.key === "s" && (e.metaKey || e.ctrlKey)) e.preventDefault();
});
💡
Для канбанов проще библиотека (dnd-kit) — но понимать событие dragstart / драги элементы обязательны, иначе не почините edge-кейсы.
ℹ️
Не забывайте клавиатуру: tab + enter для карточек показывают уровень нанимателям. А «перетащил → сохранил порядок в БД» — это уже целая механика урока 90.