>  기사  >  웹 프론트엔드  >  드래그 가능한 속성 및 기타 멤버에 대한 HTML5 설명

드래그 가능한 속성 및 기타 멤버에 대한 HTML5 설명

巴扎黑
巴扎黑원래의
2017-08-10 10:52:302070검색

[소개] Dragable 속성 이전에 HTML5의 기본 드래그 앤 드롭에 대한 몇 가지 관련 지식을 소개했습니다. 오늘은 HTML5 드래그 앤 드롭의 또 다른 작은 것들을 소개하겠습니다. 더 이상 고민하지 말고 함께 살펴보겠습니다. ​기본적으로 링크, 텍스트 및 이미지는

​ Dragable 속성

​ 이전에 HTML5의 기본 드래그 앤 드롭에 대한 몇 가지 관련 지식을 소개했습니다. 오늘은 HTML5 드래그 앤 드롭의 또 다른 작은 것들을 소개하겠습니다. 더 이상 고민하지 말고 함께 살펴보겠습니다.

 기본적으로 링크, 텍스트, 이미지는 드래그가 가능하며, 코드를 작성하지 않고도 드래그할 수 있습니다. 다른 요소 태그를 드래그할 수 있게 하려면 HTML5만 가능합니다. HTML5는 모든 HTML 요소에 대해 요소를 끌 수 있는지 여부를 나타내는 dragable 속성을 지정합니다. 링크 및 이미지 태그에서는 dragable 속성이 자동으로 true로 설정되며, 다른 요소의 dragable 속성은 기본값이 false입니다.

 dragable 속성을 지원하는 브라우저는 Firefox 4+, Chrome, IE 10+ 및 Safari 5+입니다. Opera 11.5 및 이전 버전은 HTML5 드래그 앤 드롭 기능을 지원하지 않습니다. 또한 Firefox에서 드래그 가능한 속성을 지원하려면 ondragstart 이벤트 핸들러를 추가하고 dataTransfer 객체에 일부 정보를 저장해야 합니다. IE 9 이하에서는 mousedown 이벤트 핸들러를 통해 dragDrop() 메서드를 호출하면 모든 요소를 ​​드래그할 수 있게 되었습니다. Safari 4 이하 버전에서는 요소를 드래그하기 전에 해당 요소에 대해 CSS 스타일 -khtml-user-drag:를 추가로 설정해야 합니다.

HTML5 다른 멤버 드래그 앤 드롭

dataTransfer 객체의 일부 속성은 이전에 소개되었지만 포괄적이지 않습니다. 아래의 일부 메서드와 속성은 누락되었을 수 있습니다.

 addElement(element): 드래그 작업을 위한 요소를 추가합니다. 이 요소를 추가하면 데이터(즉, 드래그 소스 역할을 하고 콜백에 응답하는 개체 추가)에만 영향을 미치며 드래그 작업 중 페이지 요소의 모양에는 영향을 주지 않습니다. 이 블로그를 작성하는 시점에서는 Firefox 3.5+에서만 이 방법을 구현합니다.

 clearData(format): 특정 형식으로 저장된 데이터를 지웁니다. 이 방법을 구현하는 브라우저에는 Firefox 3.5+, Safari 4+, IE 및 Safari 4+가 포함됩니다.

 setDragImge(element, x, y): 드래그가 발생할 때 커서 아래에 표시될 이미지를 지정합니다. 이 메서드는 표시할 HTML 요소와 이미지에 있는 커서의 x 및 y 좌표라는 세 가지 매개 변수를 받습니다. 그 중 HTML 요소는 이미지일 수도 있고, 기타 요소일 수도 있습니다. 이미지인 경우 이미지가 표시되며, 다른 요소인 경우 렌더링된 요소가 표시됩니다. 지원되는 브라우저는 Safari 4+, Chrome 및 Firefox 3.5+입니다.

 유형: 현재 저장된 데이터 유형입니다. 이는 "텍스트"와 같은 문자열 형식으로 데이터 유형을 저장하는 배열과 유사한 컬렉션입니다. 지원되는 브라우저는 Chrome, Firefox 3.5+ 및 IE 10+입니다.

 몇 가지 이론적 지식을 이해한 후 이해를 심화하기 위해 작은 예를 들어보겠습니다.

드래그 가능한 속성 및 기타 멤버의 작은 예

HTML 코드

[html] view plaincopyprint?

<ul>  
    <li draggable="true">a</li>  
    <li draggable="true">b</li>  
    <li draggable="false">c</li>  
</ul>  
<a href="http://www.baidu.com/">d</a>  
<p id="p1"></p>

 CSS 코드

[css] view plaincopyprint?

li{ width:100px; height:30px; border:1px #000000 solid; margin:20px; list-style:none;}  
#p1{ width:100px; height:100px; background:red; margin:300px;}

 JavaScript 코드

[javascript] view plaincopyprint?

//dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的  
//拖动不带链接的li,会起作用但不跳转链接  
//拖动带连接的a,会起作用也跳转  
  
window.onload = function(){  
    var aLi = document.getElementsByTagName(&#39;li&#39;);  
    var aA = document.getElementsByTagName(&#39;a&#39;);  
    var op = document.getElementById(&#39;p1&#39;);  
      
    for(var i=0;i<aLi.length;i++){  
      
        aLi[i].ondragstart = function(ev){ //拖拽前触发  
          
            this.style.background = &#39;yellow&#39;;  
              
            ev.dataTransfer.setData(&#39;a&#39;,&#39;hello&#39;);  //存储一个键值对 : value值必须是字符串  
              
            ev.dataTransfer.effectAllowed = &#39;all&#39;;  
              
            ev.dataTransfer.setDragImage(this,0,0);  
          
        };  
          
        aLi[i].ondragend = function(){  //拖拽结束触发  
          
            this.style.background = &#39;&#39;;  
          
        };  
    }  
    for(var i=0;i<aA.length;i++){  
      
        aA[i].ondragstart = function(ev){ //拖拽前触发  
          
            this.style.background = &#39;yellow&#39;;  
              
            ev.dataTransfer.setData(&#39;a&#39;,&#39;hello&#39;);  //存储一个键值对 : value值必须是字符串  
              
            ev.dataTransfer.effectAllowed = &#39;link&#39;;  
              
          
        };  
          
        aA[i].ondragend = function(){  //拖拽结束触发  
          
            this.style.background = &#39;&#39;;  
          
        };  
    }  
      
    op.ondragenter = function(){  //相当于onmouseover  
          
        this.style.background = &#39;green&#39;;  
          
    };  
      
    op.ondragleave = function(){  //相当于onmouseout  
          
        this.style.background = &#39;red&#39;;  
          
    };  
      
    op.ondragover = function(ev){ //进入目标、离开目标之间,连续触发  
          
        ev.preventDefault();  //阻止默认事件:元素就可以释放了  
          
        ev.dataTransfer.dropEffect = &#39;link&#39;;  //真对外部文件  
          
    };  
      
    op.ondrop = function(ev){  //释放鼠标的时候触发  
      
        this.style.background = &#39;red&#39;;    
      
        alert( ev.dataTransfer.getData(&#39;a&#39;) );  
        alert( ev.dataTransfer.types );  
      
    };  
      
};

바탕 화면을 페이지로 드래그하는 간단한 예

HTML 코드

[javascript] view plaincopyprint?

//dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的  
  
window.onload = function(){  
  
    var op = document.getElementById(&#39;p1&#39;);  
      
      
      
      
    op.ondragenter = function(){  //相当于onmouseover  
          
        this.style.background = &#39;green&#39;;  
          
    };  
      
    op.ondragleave = function(){  //相当于onmouseout  
          
        this.style.background = &#39;red&#39;;  
          
    };  
      
    op.ondragover = function(ev){ //进入目标、离开目标之间,连续触发  
          
        ev.preventDefault();  //阻止默认事件:元素就可以释放了  
          
        ev.dataTransfer.dropEffect = &#39;link&#39;;  //真对外部文件  
          
    };  
      
    op.ondrop = function(ev){  //释放鼠标的时候触发  
      
        ev.preventDefault();  //阻止默认行为  
      
        this.style.background = &#39;red&#39;;    
          
        var oFR = new FileReader();  
      
        var list = ev.dataTransfer.files;  //当前拖拽的那个文件(返回的一个文件列表)  
          
        //alert(list.length);  
          
        //type : 文件类型  
          
        //alert(list[0].type);  
          
          
        oFR.onload = function(){ //读取完成,触发事件  
              
            alert(this.result);  // 读取到的信息  
              
        };  
          
        oFR.readAsDataURL(list[0]);  
      
    };  
      
};

CSS 코드

[css] view plaincopyprint?

li{ width:100px; height:30px; border:1px #000000 solid; margin:20px; list-style:none;}  
#p1{ width:100px; height:100px; background:red; margin:300px;}

JavaScript 코드

[html] view plaincopyprint?

<p id="p1">梦龙小站</p>

쓰레기 삭제의 작은 예

HTML 코드

[html] view plaincopyprint?

<ul>  
    <li draggable="true">a</li>  
    <li draggable="true">b</li>  
    <li draggable="true">c</li>  
</ul>  
<p id="p1">垃圾箱</p>

CSS 코드

[css] view plaincopyprint?

li{ width:100px; height:30px; border:1px #000000 solid; margin:20px; list-style:none;}  
#p1{ width:100px; height:100px; background:red; margin:300px; color:white;}

JavaScript 코드

[javascript] view plaincopyprint?

//dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的  
  
window.onload = function(){  
    var aLi = document.getElementsByTagName(&#39;li&#39;);  
    var op = document.getElementById(&#39;p1&#39;);  
    var iNow = 0;  
      
    var targetLi = null;  
      
    for(var i=0;i<aLi.length;i++){  
      
        aLi[i].ondragstart = function(ev){ //拖拽前触发  
          
            this.style.background = &#39;yellow&#39;;  
              
            ev.dataTransfer.setData(&#39;text&#39;,this.innerHTML);  //存储一个键值对 : value值必须是字符串  
              
            targetLi = this;  
          
        };  
          
        aLi[i].ondragend = function(){  //拖拽结束触发  
          
            this.style.background = &#39;&#39;;  
          
        };  
    }  
      
    op.ondragenter = function(){  //相当于onmouseover  
          
        this.style.background = &#39;green&#39;;  
          
    };  
      
    op.ondragleave = function(){  //相当于onmouseout  
          
        this.style.background = &#39;red&#39;;  
          
    };  
      
    op.ondragover = function(ev){ //进入目标、离开目标之间,连续触发  
          
        ev.preventDefault();  //阻止默认事件:元素就可以释放了  
          
          
    };  
      
    op.ondrop = function(ev){  //释放鼠标的时候触发  
      
        this.style.background = &#39;red&#39;;    
      
        var oText = ev.dataTransfer.getData(&#39;text&#39;);  
      
        if(targetLi){  
            targetLi.parentNode.removeChild(targetLi);  
            this.innerHTML = &#39;删除的是:&#39;+oText;  
        }  
      
    };  
      
};

    위 내용은 드래그 가능한 속성 및 기타 멤버에 대한 HTML5 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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