JavaScript 드래그 앤 드롭

요약 :이 자습서에서는 JavaScript 드래그 앤 드롭 API에 대해 학습합니다.

소개 to JavaScript Drag and Drop API

HTML5는 공식적으로 끌어서 놓기 사양을 도입했습니다. 대부분의 최신 웹 브라우저는 HTML5 사양을 기반으로 기본 드래그 앤 드롭을 구현했습니다.

기본적으로 이미지와 텍스트 만 드래그 할 수 있습니다. 이미지를 드래그하려면 마우스 버튼을 누른 채 이동하면됩니다. 텍스트를 드래그하려면 일부 텍스트를 강조 표시하고 이미지를 드래그하는 것과 같은 방식으로 드래그해야합니다.

HTML5 사양은 거의 모든 요소를 드래그 할 수 있도록 지정합니다. 요소를 드래그 가능하게 만들려면 true 값이있는 draggable 속성을 HTML 태그에 추가합니다. 예 :

Code language: HTML, XML (xml)

드래그 가능한 요소의 이벤트

요소를 드래그하면 이러한 이벤트가 다음 순서로 실행됩니다.

  • dragstart
  • drag
  • dragend

마우스 버튼을 누른 상태에서 마우스 이동을 시작하면 드래그 가능한 요소에서 dragstart 이벤트가 발생합니다. 끌고있는 것입니다. 커서가 드롭 금지 기호 (선이 그어진 원)로 변경되어 요소를 자체 위에 놓을 수 없음을 나타냅니다.

dragstart 이후 이벤트가 발생하면 요소를 드래그하는 동안 drag 이벤트가 반복적으로 발생합니다.

그리고 dragend 이벤트가 발생합니다. 요소 드래그를 중지 할 때.

모든 이벤트의 대상 (e.target)은 드래그되는 요소입니다.

기본적으로 , 브라우저는 드래그 된 요소의 모양을 변경하지 않습니다. 따라서 기본 설정에 따라 모양을 사용자 지정할 수 있습니다.

드롭 타겟의 이벤트

유효한 드롭 타겟 위로 요소를 드래그하면 이러한 이벤트가 다음 순서로 실행됩니다.

  • dragenter
  • dragover
  • dragleave 또는 drop

dragenter 이벤트가 곧 시작됩니다. 요소를 놓기 대상 위로 드래그 할 때.

dragenter 이벤트가 실행 된 후 dragover 이벤트가 반복적으로 실행됩니다. 드롭 대상의 경계 내에서 요소를 드래그하는 경우

드롭 대상의 경계 외부로 요소를 드래그하면 dragover 이벤트가 실행을 중지하고 dragleave 이벤트가 실행됩니다.

요소를 대상에 놓으면 drop 이벤트가 dragleave 이벤트 대신 발생합니다.

대상 (

)의 dragenter, dragover, dragleavedrop 이벤트는 놓기 대상 요소입니다.

유효한 놓기 대상

거의 모든 요소가 놓기 대상 이벤트를 지원합니다 (dragenter, dragover, dragleavedrop). 그러나 기본적으로 놓기를 허용하지 않습니다.

놓기를 허용하지 않는 놓기 대상 위에 요소를 놓으면 drop 이벤트가 승리합니다. t fire.

요소를 유효한 놓기 대상으로 전환하려면 dragenterdragover

메소드를 호출하여

이벤트를 생성합니다. (자세한 내용은 예제 섹션 참조)

dataTransfer 객체를 사용하여 데이터 전송

드래그 앤 드롭 동작으로 데이터를 전송하려면 개체.

dataTransfer 개체는 이벤트의 속성입니다. 드래그 한 요소에서 놓기 대상으로 데이터를 전송할 수 있습니다.

dataTransfer 개체에는 두 가지 방법이 있습니다. setData()getData().

setData()를 사용하면 드래그 작업의 데이터를 지정된 형식 및 데이터로 설정할 수 있습니다. :

Code language: CSS (css)

형식은 text/plain 또는 text/uri-list 일 수 있습니다. 그리고 데이터는 드래그 개체에 추가 할 데이터를 나타내는 문자열이 될 수 있습니다.

getData() 메소드는 메소드.

getData()는 하나의 인수를 허용합니다.

형식은 text/plain 또는 text/uri-list 일 수 있습니다. getData()setData() 메소드로 저장된 문자열을 반환하거나 드래그 작업에 데이터가 포함되지 않은 경우 빈 문자열을 반환합니다.

JavaScript 드래그 앤 드롭 예제

JavaScript 드래그 앤 드롭 API를 보여주기 위해 다음과 같은 간단한 드래그 앤 드롭 애플리케이션을 개발할 것입니다.

프로젝트 구조

먼저 drag-n-drop-basics라는 새 폴더를 만듭니다. 이 폴더 안에 cssjs라는 두 개의 하위 폴더를 만듭니다.

둘째, iv라는 새 파일을 만듭니다. js 폴더의 id = “1238f56999″>

, cssstyle.css div> 폴더, drag-n-drop-basics 폴더의 index.html

셋째,

및 다음과 같이 index.html 파일의 app.js에 연결되는 스크립트 태그 :

index.html 파일 빌드

index.html 파일에 다음 코드를 배치합니다.

이 index.html 파일에서 .container 요소를 사용하여 제목과 drop-targets 요소를 정렬했습니다.

drop-targets 요소 내부에서 동일한 클래스 box로 세 개의 div 요소를 배치했습니다. 그리고 첫 번째 상자에 item 클래스가있는 다른 div 요소를 배치합니다.

index.html를 열고 노란색 상자를 드래그하면 드래그 할 수 없음을 나타내는 커서가 표시됩니다.

요소를 드래그 가능하게 만들려면 true 값으로 draggable 속성을 추가합니다. 다음과 같이 HTML 태그에 추가합니다.

Code language: JavaScript (javascript)

이제 index.html를 저장하면 브라우저에서 엽니 다. 다시, 다음과 같이 항목 요소를 드래그 할 수 있습니다.

드래그 가능한 요소에서 이벤트 처리

style.css 파일에는 .hide가 있습니다. 요소를 숨기는 클래스 :

Code language: CSS (css)

app.js 파일에 다음 코드를 추가합니다.

어떻게 작동 :

  • 먼저 querySelector()를 사용하여 드래그 가능한 요소를 선택합니다.
  • 두 번째, 이벤트 핸들러를 드래그 가능한 요소에 추가합니다.
  • 세 번째로 dragStart() 함수를 정의하여 dragstart 이벤트.

index.html 파일을 열고 드래그 가능한 요소를 드래그하기 시작하면 drag starts... 메시지가 콘솔.

dragStart 이벤트 핸들러에서 드래그 가능한 요소의 id를 저장해야합니다. 그리고 숨겨야합니다.

요소를 드래그하면 드래그를 시작하면 사라집니다.

이 문제를 해결하려면 setTimeout() 함수 :

이제 드래그 가능한 요소를 원래 위치에서 드래그 할 수 있습니다.

놓기 대상에서 이벤트 처리

style.css 파일에는

:

Code language: CSS (css)

app.js에서 놓기 대상 요소를 선택하고 dragenter, dragover, dragleavedrop 이벤트 :

dragenter

이벤트가 발생합니다. dragleavedrop 이벤트가 발생하면 스타일을 복원해야합니다.

이렇게하려면 추가 및 제거합니다. drag-over 클래스를 다음과 같이 drop 대상으로 :

이제 드래그 가능한 요소를 다른 드롭으로 드래그하면 target에서 드롭 대상의 테두리가 다음 그림과 같이 변경되는 것을 볼 수 있습니다.

드롭 타겟을 유효하게하려면 dragenterevent.preventDefault()를 호출해야합니다. > 및 dragover 이벤트 핸들러는 다음과 같습니다.

이렇게하지 않으면 drop 이벤트가 발생하지 않습니다. div 요소는 기본적으로 유효한 놓기 대상이 아니기 때문에 실행됩니다.

드래그 가능한 요소를 놓기 대상으로 드래그하면 커서가 요소를 삭제할 수 있음을 나타내는 변경 사항 :

이제 항목 요소를 드롭하면 즉시 사라지는 것을 볼 수 있습니다.

이 문제를 해결하려면 문제가 발생하면 drop 이벤트 처리를 추가해야합니다.

  • 먼저, iv id의 getData() 메소드를 사용하여 드래그 가능한 요소의 id를 가져옵니다. = “cafe64ce48″>

개체.

  • 둘째, 드래그 가능한 요소를 놓기 대상 요소의 하위 요소로 추가합니다.
  • 셋째, iv id = “를 제거합니다. draggable 요소의 bec293d4de “>
  • 클래스.

    다음 코드는 전체 drop 이벤트 핸들러 :

    드래그 가능한 요소를 지금 드래그 앤 드롭하면 예상대로 작동합니다.

    다음은 전체 app.js 파일을 보여줍니다.

    여기에 데모 링크가 있습니다.

    요약

    • draggable 속성을 true 값으로 추가합니다. 요소에 드래그 할 수 있습니다.
    • dragstart, dragdragend 이벤트는 드래그 가능한 요소에서 발생합니다.
    • dragenter, dragover, 또는 drop 이벤트가 놓기 대상에서 시작됩니다.
    • event.preventDefault()dragenterdragover 이벤트 핸들러를 사용하여 요소를 유효한 놓기 대상으로 만듭니다.
    • 개체를 setData()getData() 메서드를 사용하여 끌어서 놓기 작업에서 데이터를 전송합니다.

    li>

    • 이 튜토리얼이 도움이 되었습니까?
    • 예 아니요

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다