※ 이 글은 예전 블로그에서 퍼온 글입니다. 가독성이 나쁘다면 예전 블로그에서 읽어주세요.
먼저, 드래그가 가능한 요소로 만들기 위해서는 draggale attribute과 ondragstart 전역 이벤트 핸들러를 추가해 줄 필요가 있음.
Mozilla에 ondragstart도 함께 넣어주라고 돼있어서 같이 적어 두지만, dataTransfer과 관련한 일을 할 필요가 없을 시에는 작성 안 해도 상관없는 듯하다.
<div draggable="boolean" ondragstart="dragstart_handlerName(event);"></div>
// boolean: 드래그 가능 여부 (true 또는 false)
function dragstart_handlerName(ev) {
console.log("dragStart");
// 데이터 전달 객체에 대상 요소의 id를 추가합니다.
ev.dataTransfer.setData("text/plain", ev.target.id);
}
그런 다음, 아래와 같은 드래그 이벤트를 사용해서 이벤트가 일어나게 할 수 있음.
이벤트 |
이벤트 핸들러 |
설명 |
dragstart |
ondragstart |
사용자가 요소나 텍스트 블록을 드래그하기 시작했을 때 발생한다. + 파일을 브라우저로 드래그할 때는 발생하지 않는다. |
dragenter |
ondragenter |
드래그한 요소나 텍스트 블록을 적합한 드롭 대상위에 올라갔을 때 발생한다. event.preventDefault() 필요 |
dragover |
ondragover |
요소나 텍스트 블록을 적합한 드롭 대상 위로 지나갈 때 발생한다. (매 수백 밀리 초마다 발생한다.) + 기본적으로 HTML 요소는 다른 요소의 위에 위치할 수 없습니다. 따라서 다른 요소 위에 위치할 수 있도록 만들기 위해서는 놓일 장소에 있는 요소의 기본 동작을 막아야만 합니다. 이 작업을 event.preventDefault() 메서드를 호출하는 것만으로 간단히 설정할 수 있습니다. (안 해주면 drop이 안됨) |
drag |
ondrag |
요소나 텍스트 블록을 드래그할 때 발생한다. |
drop |
ondrop |
요소나 텍스트 블록을 적합한 드롭 대상에 드롭했을 때 발생한다. |
dragleave |
ondragleave |
드래그하는 요소나 텍스트 블록이 적합한 드롭 대상에서 벗어났을 때 발생한다. |
dragend |
ondragend |
드래그를 끝냈을 때 발생한다. (마우스 버튼을 떼거나 ESC 키를 누를 때) + 파일을 브라우저로 드래그할 때는 발생하지 않습니다. |
dragexit |
ondragexit |
요소가 더 이상 드래그의 직접적인 대상이 아닐 때 발생한다. |
간단한 요소 이동 정도의 Drag and Drop 기능을 구현하기 위해서는 위의 내용 정도만 알아두면 된다.
하지만 드래그 시 데이터의 복사, 링크 이동 등등 다양한 기능을 수행하게 하고 싶다면 다음 링크를 참고해라.
+ 참고하면 좋은 글들
HTML 드래그 앤 드롭 API
HTML 드래그 앤 드롭 인터페이스는 파이어폭스와 다른 브라우저에서 어플리케이션이 드래그 앤 드롭 기능을 사용하게 해줍니다.
developer.mozilla.org
DataTransfer
The DataTransfer object is used to hold the data that is being dragged during a drag and drop operation. It may hold one or more data items, each of one or more data types. For more information about drag and drop, see HTML Drag and Drop API.
developer.mozilla.org
'개발 > Javascript' 카테고리의 다른 글
Babel의 뜻과 사용법 (0) | 2020.04.07 |
---|---|
Doom이 아니라 DOM! (문서 객체 모델, Document Object Model) (1) | 2020.04.02 |
BOM (Browser Object Model)에 대한 정리 (0) | 2020.04.02 |
생성자의 문제점 (생성자 함수를 쓸 때 주의 할 점) (1) | 2020.04.02 |
자바스크립트 관점에서 정리한 클래스(Class)와 프로토타입(Prototype)에 대하여 (0) | 2020.04.02 |