設定元素為可拖放
draggable 屬性設定為 true:
<img draggable="true" />
拖動什麼 – ondragstart 和 setData()
dataTransfer.setData() 方法設定被拖資料的資料型別和值:
function drag(e) {
e.dataTransfer.setData("text/html", value);
}
注:"text/html"引數,我在Mac上用Safari開啟,遇到過不能正常解析,解決方法把html和text位置互換一下。
放到何處 – ondragover
ondragover 事件規定在何處放置被拖動的資料。
預設地,無法將資料/元素放置到其他元素中。如果需要設定允許放置,我們必須阻止對元素的預設處理方式。
event.preventDefault();
進行放置 – ondrop
呼叫 preventDefault() 來避免瀏覽器對資料的預設處理(drop 事件的預設行為是以連結形式開啟)
通過 dataTransfer.getData("text/html") 方法獲得被拖的資料。該方法將返回在 setData() 方法中設定為相同型別的任何資料。
function drop(e) {
e.preventDefault();
}
瀏覽器支援
Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支援拖放。
註釋:在 Safari 5.1.2 中不支援拖放。
示例:
Example1:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> html, body { margin: 0; padding: 0; } .drag { width: 50px; height: 50px; background: blue; display: inline-block; margin: 10px; color: white; font-size: 20px; text-align: center; line-height: 50px; cursor: move; } </style> </head> <body> <div class="drag drag1" draggable="true" ondragstart="drag(event, this)" ondragover="allowDrop(event)" ondrop="drop(event,this)">1</div> <div class="drag drag2" draggable="true" ondragstart="drag(event, this)" ondragover="allowDrop(event)" ondrop="drop(event,this)">2</div> <div class="drag drag3" draggable="true" ondragstart="drag(event, this)" ondragover="allowDrop(event)" ondrop="drop(event,this)">3</div> <script type="text/javascript"> var srcEl = null; function drag(e, el) { srcEl = el; e.dataTransfer.setData("text/html", el.innerHTML); } function drop(e, el){ e.preventDefault(); // e.stopPropagation(); if (srcEl != el) { srcEl.innerHTML = el.innerHTML; el.innerHTML = e.dataTransfer.getData("text/html"); } } function allowDrop(e) { e.preventDefault(); } </script> </body> </html>
Example2:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> html, body { margin: 0; padding: 0; } #div1 { width: 300px; height: 300px; border: 1px solid red; } #drag1 { width: 300px; height: 300px; } </style> </head> <body> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <img id="drag1" draggable="true" ondragstart="drag(event)" src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=175152409,3501278703&fm=27&gp=0.jpg" /> <script type="text/javascript"> function drag(e) { e.dataTransfer.setData("text/html", e.target.id); } function drop(e) { e.preventDefault(); e.stopPropagation(); var id = e.dataTransfer.getData(`text/html`); e.target.appendChild(document.getElementById(id)); } function allowDrop(e) { e.preventDefault(); } </script> </body> </html>
W3school原文連結:http://www.w3school.com.cn/html5/html_5_draganddrop.asp