How to implement HTML5 drag and drop
· Category: HTML & CSS
Short answer
HTML5 drag and drop relies on the draggable attribute and a suite of events: dragstart, dragover, drop, and dragend.
Steps
- Set
draggable="true"on the element to drag. - In
dragstart, useevent.dataTransfer.setData()to store payload data. - Prevent the default action in
dragoverto allow dropping. - In
drop, read the data withdataTransfer.getData()and update the DOM.
Example
const items = document.querySelectorAll('.draggable');
const zone = document.querySelector('.dropzone');
items.forEach((item) => {
item.addEventListener('dragstart', (e) => {
e.dataTransfer.setData('text/plain', e.target.id);
});
});
zone.addEventListener('dragover', (e) => {
e.preventDefault();
});
zone.addEventListener('drop', (e) => {
e.preventDefault();
const id = e.dataTransfer.getData('text/plain');
zone.appendChild(document.getElementById(id));
});
Tips
- Add visual cues (opacity, borders) during
dragenteranddragleave. - For complex UIs, consider libraries like
react-beautiful-dndor@dnd-kit. - Touch devices require polyfills or alternative libraries because native HTML5 DnD does not support touch.