
드래그 앤 드롭(Drag and Drop)은 마우스로 요소를 선택(드래그)하여 다른 위치로 이동(드롭)하는 기능이다. html5의 Drag and Drop API또는 마우스 이벤트(mousedown, mousemove, mouseup)을 활용해 구현할 수 있다.
드래그 가능한 요소 설정
draggable="true" 속성을 추가하거나, 직접 마우스 이벤트를 활용할 수 있다.드래그 시작 이벤트(dragstart or mousedown)
드래그 중 이벤트(drag or mousemove)
드래그 종료 이벤트(dragend or mouseup)
드롭 영역 설정
dragover 이벤트에서 기본 동작을 막아야 한다.(event.preventDefault() 필요).드래그 제한 및 조건부 로직
애니메이션 및 사용자 경험 개선
HTML5의 draggable 속성과 dragstart, drop 이벤트를 활용하는 방식이다.
🔹 장점
HTML5 기본 기능이라 라이브러리 없이도 사용 가능🔹 단점
드래그할 요소의 위치를 직접 조작하는 방식이다.
🔹 장점
🔹 단점
예제 코드 (마우스 이벤트 활용)
📝 기본적인 드래그 앤 드롭 구현 (Vanilla JS)
document.addEventListener("DOMContentLoaded", () => {
const draggable = document.getElementById("draggable");
let offsetX = 0, offsetY = 0;
let isDragging = false;
draggable.addEventListener("mousedown", (e) => {
isDragging = true;
offsetX = e.clientX - draggable.getBoundingClientRect().left;
offsetY = e.clientY - draggable.getBoundingClientRect().top;
draggable.style.position = "absolute";
draggable.style.zIndex = "1000";
});
document.addEventListener("mousemove", (e) => {
if (!isDragging) return;
draggable.style.left = `${e.clientX - offsetX}px`;
draggable.style.top = `${e.clientY - offsetY}px`;
});
document.addEventListener("mouseup", () => {
isDragging = false;
});
});
드롭 영역 추가
const dropZone = document.getElementById("dropZone");
dropZone.addEventListener("mouseup", () => {
if (isDragging) {
draggable.style.left = `${dropZone.getBoundingClientRect().left}px`;
draggable.style.top = `${dropZone.getBoundingClientRect().top}px`;
}
});
Snap) 되도록 구현CSS transition 활용하여 부드러운 이동touchstart, touchmove, touchend 활용)sortable list)