Drag and Drop과 관련하여 (Mozilla 참고)

2020. 4. 2. 10:06·개발/Javascript
728x90

※ 이 글은 예전 블로그에서 퍼온 글입니다. 가독성이 나쁘다면 예전 블로그에서 읽어주세요.


먼저, 드래그가 가능한 요소로 만들기 위해서는 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
'개발/Javascript' 카테고리의 다른 글
  • Doom이 아니라 DOM! (문서 객체 모델, Document Object Model)
  • BOM (Browser Object Model)에 대한 정리
  • 생성자의 문제점 (생성자 함수를 쓸 때 주의 할 점)
  • 자바스크립트 관점에서 정리한 클래스(Class)와 프로토타입(Prototype)에 대하여
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    한양대학교
    HTML5
    프론트엔드
    Javascript
    프로그래밍
    우테코
    독후감
    개발
    대학
    디자인
    개발자
    react
    프로젝트
    CSS
    독서
    알고리즘
    ES6
    HTML
    백준
    개념
    1주 1권
    군대
    3기
    tutorial
    에리카
    Erica
    TypeScript
    타입스크립트
    1주에 1권씩
    canvas
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
Drag and Drop과 관련하여 (Mozilla 참고)
상단으로

티스토리툴바