Document: drag 이벤트
drag 이벤트는 사용자가 요소 또는 텍스트를 드래그하는 동안 매 수백 밀리초마다 발생합니다.
| 버블링 | 예 |
|---|---|
| 취소 가능 | 예 |
| 기본 동작 | 드래그 앤 드롭 작업을 지속합니다. |
| 인터페이스 | DragEvent (en-US) |
| 이벤트 처리기 속성 | ondrag (en-US) |
예제
드래그 앤 드롭 예제
HTML
html
<div class="dropzone">
<div id="draggable" draggable="true">
드래그 가능
</div>
</div>
<div class="dropzone"></div>
CSS
css
body {
/* 사용자가 예제의 텍스트를 선택하지 못하도록 */
user-select: none;
}
#draggable {
text-align: center;
background: white;
}
.dropzone {
width: 200px;
height: 20px;
background: blueviolet;
margin: 10px;
padding: 10px;
}
.dropzone.dragover {
background-color: purple;
}
.dragging {
opacity: .5;
}
JavaScript
js
let dragged;
/* 드래그 가능한 대상에서 발생하는 이벤트 */
document.addEventListener("drag", event => {
console.log("dragging");
});
document.addEventListener("dragstart", event => {
// 드래그한 요소에 대한 참조 저장
dragged = event.target;
// 반투명하게 만들기
event.target.classList.add("dragging");
});
document.addEventListener("dragend", event => {
// 투명도 초기화
event.target.classList.remove("dragging");
});
/* 드롭 대상에서 발생하는 이벤트 */
document.addEventListener("dragover", event => {
// 드롭을 허용하기 위해 기본 동작 취소
event.preventDefault();
}, false);
document.addEventListener("dragenter", event => {
// 드래그 가능한 요소가 대상 위로 오면 강조
if (event.target.classList.contains("dropzone")) {
event.target.classList.add("dragover");
}
});
document.addEventListener("dragleave", event => {
// 드래그 가능한 요소가 대상 밖으로 나가면 강조 제거
if (event.target.classList.contains("dropzone")) {
event.target.classList.remove("dragover");
}
});
document.addEventListener("drop", event => {
// 일부 요소의 링크 열기와 같은 기본 동작 취소
event.preventDefault();
// 드래그한 요소를 선택한 드롭 대상으로 이동
if (event.target.classList.contains("dropzone")) {
event.target.classList.remove("dragover");
dragged.parentNode.removeChild(dragged);
event.target.appendChild(dragged);
}
});
결과
명세
| Specification |
|---|
| HTML Standard # ix-handler-ondrag |
| HTML Standard # event-dnd-drag |
브라우저 호환성
BCD tables only load in the browser
같이 보기
- 다른 드래그 앤 드롭 이벤트:
- 이 이벤트의 다른 대상:
Window:drag이벤트HTMLElement:drag이벤트SVGElement(en-US):drag이벤트