머리말
HTML5는 직접 드래그 앤 드롭 API를 제공합니다. 훌륭한 드래그 앤 드롭 효과를 구현하는 것이 편리합니다. js를 많이 작성할 필요가 없습니다. 요소. 요소를 드래그 앤 드롭하려면 해당 요소의 draggable 속성을 true로 설정해야 합니다. 속성이 false인 경우 드래그 앤 드롭이 허용되지 않습니다. img 요소와 a 요소 모두 기본적으로 draggable 속성이 true로 설정되어 있으므로 직접 드래그 앤 드롭할 수 있습니다. 이 두 요소를 드래그 앤 드롭하지 않으려면 속성을 false로 설정하면 됩니다.
드래그 앤 드롭 이벤트
소스 객체:
<p id="source" draggable="true">a元素</p> <p id="process">b元素</p> <p id="target">c元素</p> <script> var source = document.getElementById('source'), // a元素 process = document.getElementById('process'), // b元素 target = document.getElementById('target'); // c元素 source.addEventListener('dragstart',function(ev){ // dragstart事件由a元素产生 console.log('a元素开始被拖动'); },false) process.addEventListener('dragenter',function(ev){ // dragenter事件由b元素产生 console.log('a元素开始进入b元素'); },false) process.addEventListener('dragleave',function(ev){ // dragleave事件由b元素产生 console.log('a元素离开b元素'); },false) target.addEventListener('drop',function(ev){ // drop事件由c元素产生 console.log('a元素拖放到c元素了'); ev.preventDefault(); },false) document.ondragover = function(e){e.preventDefault();} </script>dataTransfer 객체
setData()
event.dataTransfer.setData('text/plain','Hello World');
getData()
event.dataTransfer.getData('text/plain');clear
event.dataTransfer.clearData();
setDragImage()
var source = document.getElementById('source'), icon = document.createElement('img'); icon.src = 'img.png'; source.addEventListener('dragstart',function(ev){ ev.dataTransfer.setDragImage(icon,-10,-10) },false)
effectAllowed 및 dropEffect 속성
주목할 만한 점은 IE가 dataTransfer 개체를 지원하지 않는다는 것입니다. 네, IE 버전에 상관없이 지원되지 않습니다.
드래그 앤 드롭 정렬 구현
var source = document.querySelectorAll('.list'), dragElement = null; for(var i = 0; i < source.length; i++){ source[i].addEventListener('dragstart',function(ev){ dragElement = this; },false); source[i].addEventListener('dragenter', function(ev){ if(dragElement != this){ this.parentNode.insertBefore(dragElement,this); } }, false) source[i].addEventListener('dragleave', 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에서 요소가
높이로 설정되지 않은 경우 dragleave 이벤트가 실행되지 않는 것을 발견했습니다. 더 중요한 점은 iOS와 Android에서는 전혀 호환되지 않는다는 점입니다. 다행히도 모바일 장치와 완벽하게 호환되는 플러그인이 있습니다.
플러그인 주소: ios-html5-drag-drop-shim
모바일 단말기에서 드래그를 구현하려면 원래 코드에 플러그인을 도입하기만 하면 됩니다.
1.
무료 h5 온라인 동영상 튜토리얼위 내용은 HTML5 고급 자습서 - 드래그 앤 드롭 정렬을 구현하는 드래그 앤 드롭 API의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!