HTML DOM의 draggable 속성은 특정 요소가 드래그 가능한지 여부를 나타내는 불리언(Boolean) 값을 반환하거나 설정하는 데 사용됩니다. 이 속성을 활용하면 웹 페이지에서 이미지, 텍스트 등 다양한 요소를 자유롭게 끌어다 놓는 드래그 앤 드롭(Drag & Drop) 기능을 구현할 수 있습니다.
참고: 링크(<a>) 태그와 이미지(<img>) 태그는 별도의 설정 없이도 기본적으로 드래그가 가능합니다.
draggable 속성의 주요 값
- true – 해당 요소를 드래그할 수 있습니다.
- false – 해당 요소를 드래그할 수 없습니다.
- auto – 브라우저의 기본 동작에 따라 결정됩니다.
HTML draggable 속성 예제
아래 예제는 draggable 속성과 함께 ondragstart, ondrop, ondragover 이벤트를 활용해 피자 조각을 두 사람에게 드래그 앤 드롭으로 분배하는 간단한 프로그램입니다.
<!DOCTYPE html>
<html>
<head>
<title>HTML DOM draggable</title>
<style>
* {
padding: 2px;
margin:5px;
}
form {
width:70%;
margin: 0 auto;
text-align: center;
}
fieldset {
min-height: 200px;
}
input[type="button"] {
border-radius: 10px;
}
.options{
display: inline-block;
}
#paulaShare {
width: 200px;
height: 70px;
padding: 10px;
border: 2px solid black;
}
#adamShare {
width: 200px;
height: 70px;
padding: 10px;
border: 2px solid black;
}
</style>
<script>
function allowDrop(dragEvent) {
dragEvent.preventDefault();
}
function drag(dragEvent) {
dragEvent.dataTransfer.setData("Text", dragEvent.target.id);
}
function drop(dragEvent) {
var data = dragEvent.dataTransfer.getData("Text");
dragEvent.target.appendChild(document.getElementById(data));
dragEvent.preventDefault();
}
</script>
</head>
<body>
<form>
<fieldset>
<legend>HTML-DOM-draggable</legend>
<div class="options" id="paulaShare" ondrop="drop(event)"
ondragover="allowDrop(event)">Paula's Share</div><br>
<div class="options">
<p id="optionOne" draggable="true" ondragstart="drag(event)">3/8</p>
<p id="optionTwo" draggable="true" ondragstart="drag(event)">5/8</p>
</div><br>
<div class="options" id="adamShare" ondrop="drop(event)"
ondragover="allowDrop(event)">Adam's Share</div>
<div id="display">Distribute 8 pizza slices between Adam and Paula in ration 3:5</div>
</body>
</html>코드 설명
- draggable="true": '3/8'과 '5/8' 텍스트 요소를 드래그 가능 상태로 설정합니다.
- ondragstart: 드래그가 시작될 때 dataTransfer 객체에 드래그되는 요소의 ID를 저장합니다.
- ondragover: allowDrop 함수가 preventDefault()를 호출하여 해당 영역에 요소를 드롭할 수 있도록 허용합니다.
- ondrop: 드롭된 위치에 저장된 ID의 요소를 추가하여 드래그 앤 드롭을 완료합니다.
실행 결과
드래그하기 전 화면 −

드래그한 후 화면 −

마무리
draggable 속성은 단독으로는 기능이 제한적이지만, Drag & Drop API의 다양한 이벤트(ondragstart, ondragover, ondrop 등)와 함께 사용하면 파일 업로드, 항목 정렬, 할 일 목록 관리처럼 직관적인 사용자 인터페이스를 쉽게 만들 수 있습니다. 위 예제를 응용하여 자신만의 드래그 앤 드롭 기능을 직접 구현해 보시기 바랍니다.