목차
드래그 앤 드롭 이벤트는 다양한 요소에 의해 생성됩니다. 요소를 드래그 앤 드롭하면 여러 요소를 통과하여 최종적으로 배치하려는 요소에 도달할 수 있습니다. 여기서는 드래그된 요소를 소스 개체, 전달된 요소를 프로세스 개체, 도착한 요소를 대상 개체라고 임시로 호출합니다. 서로 다른 객체는 서로 다른 드래그 앤 드롭 이벤트를 생성합니다.
는 모든 드래그 앤 드롭 이벤트에서 원본 객체와 대상 객체 간에 데이터를 전송하는 데 사용되는 데이터 전송 객체 dataTransfer를 제공합니다. 다음으로, 이 객체가 데이터를 전송하는 방법을 이해하기 위해 이 객체의 메서드와 속성을 알아 보겠습니다.
이 메소드는 dataTransfer 객체에 데이터를 저장합니다. 두 개의 매개변수를 받습니다. 첫 번째는 저장할 데이터 유형을 나타내는 문자열입니다.
이 메서드는 dataTransfer 개체에서 데이터를 읽습니다. 매개변수는 setData에 지정된 데이터 유형입니다. 예:
이 메소드는 dataTransfer 객체에 저장된 데이터를 지웁니다. 매개변수는 선택사항이며 데이터 유형입니다. 매개변수가 비어 있으면 모든 유형의 데이터가 지워집니다. 예: " >Data()이 메소드는 dataTransfer 객체에 저장된 데이터를 지웁니다. 매개변수는 선택사항이며 데이터 유형입니다. 매개변수가 비어 있으면 모든 유형의 데이터가 지워집니다. 예:
이 메소드는 img 요소를 사용하여 드래그 앤 드롭 아이콘을 설정합니다. 세 개의 매개변수를 받습니다. 첫 번째는 아이콘 요소이고, 두 번째는 마우스 포인터에서 아이콘 요소의 X축 변위이고, 세 번째는 마우스 포인터에서 아이콘 요소의 Y축 변위입니다. 예:
이 두 속성은 드래그 앤 드롭의 시각적 효과를 설정하기 위해 결합됩니다.
우리는 이미 드래그 앤 드롭 API의 사용법에 익숙합니다. 프로젝트. 먼저 아이디어를 정리해 보겠습니다.
주로 호환성이 별로 좋지 않기 때문입니다. IE에서는 OK이지만 적어도 위의 드래그 정렬은 IE10과 호환됩니다.
웹 프론트엔드 H5 튜토리얼 HTML5 고급 자습서 - 드래그 앤 드롭 정렬을 구현하는 드래그 앤 드롭 API

HTML5 고급 자습서 - 드래그 앤 드롭 정렬을 구현하는 드래그 앤 드롭 API

May 12, 2017 pm 12:02 PM

머리말

HTML5는 직접 드래그 앤 드롭 API를 제공합니다. 훌륭한 드래그 앤 드롭 효과를 구현하는 것이 편리합니다. js를 많이 작성할 필요가 없습니다. 요소. 요소를 드래그 앤 드롭하려면 해당 요소의 draggable 속성을 true로 설정해야 합니다. 속성이 false인 경우 드래그 앤 드롭이 허용되지 않습니다. img 요소와 a 요소 모두 기본적으로 draggable 속성이 true로 설정되어 있으므로 직접 드래그 앤 드롭할 수 있습니다. 이 두 요소를 드래그 앤 드롭하지 않으려면 속성을 false로 설정하면 됩니다.

드래그 앤 드롭 이벤트

드래그 앤 드롭 이벤트는 다양한 요소에 의해 생성됩니다. 요소를 드래그 앤 드롭하면 여러 요소를 통과하여 최종적으로 배치하려는 요소에 도달할 수 있습니다. 여기서는 드래그된 요소를 소스 개체, 전달된 요소를 프로세스 개체, 도착한 요소를 대상 개체라고 임시로 호출합니다. 서로 다른 객체는 서로 다른 드래그 앤 드롭 이벤트를 생성합니다.

소스 객체:


    dragstart: 소스 객체가 드래그 앤 드롭을 시작합니다.
  • 드래그: 소스 개체의 드래그 앤 드롭 프로세스 중입니다.
  • dragend: 원본 개체의 드래그 앤 드롭이 종료됩니다.
  • 프로세스 객체:
  • dragenter: 소스 객체가 프로세스 객체의 범위에 들어가기 시작합니다.
  • 드래그오버: 소스 객체가 프로세스 객체의 범위 내에서 이동합니다.
  • dragleave: 소스 개체가 프로세스 개체의 범위를 벗어납니다.
  • 대상 개체:
  • drop: 소스 개체를 대상 개체에 드래그 앤 드롭합니다.
  • <p id="source" draggable="true">a元素</p>
    <p id="process">b元素</p>
    <p id="target">c元素</p>
    
    <script>
        var source = document.getElementById(&#39;source&#39;),     // a元素
            process = document.getElementById(&#39;process&#39;),   // b元素
            target = document.getElementById(&#39;target&#39;);     // c元素
        
        source.addEventListener(&#39;dragstart&#39;,function(ev){   // dragstart事件由a元素产生
            console.log(&#39;a元素开始被拖动&#39;);
        },false)
    
        process.addEventListener(&#39;dragenter&#39;,function(ev){  // dragenter事件由b元素产生
            console.log(&#39;a元素开始进入b元素&#39;);
        },false)
        process.addEventListener(&#39;dragleave&#39;,function(ev){  // dragleave事件由b元素产生
            console.log(&#39;a元素离开b元素&#39;);
        },false)
    
        target.addEventListener(&#39;drop&#39;,function(ev){        // drop事件由c元素产生
            console.log(&#39;a元素拖放到c元素了&#39;);
            ev.preventDefault();
        },false)
        document.ondragover = function(e){e.preventDefault();}
    </script>
    로그인 후 복사

    dataTransfer 객체
  • 는 모든 드래그 앤 드롭 이벤트에서 원본 객체와 대상 객체 간에 데이터를 전송하는 데 사용되는 데이터 전송 객체 dataTransfer를 제공합니다. 다음으로, 이 객체가 데이터를 전송하는 방법을 이해하기 위해 이 객체의 메서드와 속성을 알아 보겠습니다.

    setData()

    이 메소드는 dataTransfer 객체에 데이터를 저장합니다. 두 개의 매개변수를 받습니다. 첫 번째는 저장할 데이터 유형을 나타내는 문자열입니다.

    text/plain: 텍스트 텍스트.
  • 텍스트/html: HTML 텍스트.
  • text/
  • xml

    : XML 텍스트.

  • text/uri-list: URL 목록, 각 URL은 한 줄입니다.
  • 두 번째 파라미터는 저장할 데이터입니다. 예:
  • event.dataTransfer.setData(&#39;text/plain&#39;,&#39;Hello World&#39;);
    로그인 후 복사

    getData()

    이 메서드는 dataTransfer 개체에서 데이터를 읽습니다. 매개변수는 setData에 지정된 데이터 유형입니다. 예:

    event.dataTransfer.getData(&#39;text/plain&#39;);
    로그인 후 복사

    clear

    Data()이 메소드는 dataTransfer 객체에 저장된 데이터를 지웁니다. 매개변수는 선택사항이며 데이터 유형입니다. 매개변수가 비어 있으면 모든 유형의 데이터가 지워집니다. 예:

    event.dataTransfer.clearData();
    로그인 후 복사

    setDragImage()

    이 메소드는 img 요소를 사용하여 드래그 앤 드롭 아이콘을 설정합니다. 세 개의 매개변수를 받습니다. 첫 번째는 아이콘 요소이고, 두 번째는 마우스 포인터에서 아이콘 요소의 X축 변위이고, 세 번째는 마우스 포인터에서 아이콘 요소의 Y축 변위입니다. 예:

    var source = document.getElementById(&#39;source&#39;),
        icon = document.createElement(&#39;img&#39;);
    
    icon.src = &#39;img.png&#39;;
    
    source.addEventListener(&#39;dragstart&#39;,function(ev){
        ev.dataTransfer.setDragImage(icon,-10,-10)
    },false)
    로그인 후 복사

    effectAllowed 및 dropEffect 속성

    이 두 속성은 드래그 앤 드롭의 시각적 효과를 설정하기 위해 결합됩니다.

    주목할 만한 점은 IE가 dataTransfer 개체를 지원하지 않는다는 것입니다. 네, IE 버전에 상관없이 지원되지 않습니다.

    드래그 앤 드롭 정렬 구현

    우리는 이미 드래그 앤 드롭 API의 사용법에 익숙합니다. 프로젝트. 먼저 아이디어를 정리해 보겠습니다.

    목록에서 각 요소를 드래그 앤 드롭할 수 있습니다. 그런 다음 먼저 각 요소에 대해 draggable 속성을 true로 설정해야 합니다.
  • 각 요소의 dragstart 이벤트를 듣고 소스 개체에 스타일을 지정하여 구별합니다.
  • 각 요소의 dragenter 이벤트를 수신합니다. 소스 개체가 현재 요소에 들어가면 해당 요소 앞에 소스 개체를 추가합니다. 이러한 방식으로 후속 요소는 소스 개체에 의해 압착되어 정렬 효과를 얻습니다.
  • 그러나 소스 개체의 순위는 마지막으로 지정할 수 없고 마지막에서 두 번째로만 지정될 수 있습니다. 이때, dragleave 이벤트를 들어야 합니다. 프로세스 객체가 마지막 요소일 때 소스 객체는 프로세스 객체를 떠난 후 소스 객체가 끝에 추가됩니다.
  • 메인 코드는 다음과 같습니다.
  • var source = document.querySelectorAll(&#39;.list&#39;),
        dragElement = null;
    
    for(var i = 0; i < source.length; i++){
        source[i].addEventListener(&#39;dragstart&#39;,function(ev){
            dragElement = this;
        },false);
    
        source[i].addEventListener(&#39;dragenter&#39;, function(ev){
            if(dragElement != this){
                this.parentNode.insertBefore(dragElement,this);
            }
        }, false)
    
        source[i].addEventListener(&#39;dragleave&#39;, function(ev){
            if(dragElement != this){
                if(this == this.parentNode.lastElementChild || this == this.parentNode.lastChild){
                    this.parentNode.appendChild(dragElement);
                }
            }
        }, false)
    };
    
    document.ondragover = function(e){e.preventDefault();}
    document.ondrop = function(e){e.preventDefault();}
    로그인 후 복사

    전체 코드 주소: drag-demo

    호환

    주로 호환성이 별로 좋지 않기 때문입니다. IE에서는 OK이지만 적어도 위의 드래그 정렬은 IE10과 호환됩니다.

    그리고 간단한 실험에서 IE에서 요소가

    높이

    로 설정되지 않은 경우 dragleave 이벤트가 실행되지 않는 것을 발견했습니다. 더 중요한 점은 iOS와 Android에서는 전혀 호환되지 않는다는 점입니다. 다행히도 모바일 장치와 완벽하게 호환되는 플러그인이 있습니다.

    플러그인 주소: ios-html5-drag-drop-shim


    모바일 단말기에서 드래그를 구현하려면 원래 코드에 플러그인을 도입하기만 하면 됩니다.

    아아아앙

    [관련 추천]

1.

무료 h5 온라인 동영상 튜토리얼

2. HTML5 정식 버전 매뉴얼

3. php.cn 원본 html5 동영상 튜토리얼

위 내용은 HTML5 고급 자습서 - 드래그 앤 드롭 정렬을 구현하는 드래그 앤 드롭 API의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

See all articles