</pre><p><pre name="code" class="html"><!DOCTYPE HTML> <html> <head> <style type="text/css"> #div1 {width:488px;height:70px;padding:10px;border:1px solid #aaaaaa;} </style> <script type="text/javascript"> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData("Text",ev.target.id); } function drop(ev) { var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); } </script> </head> <body> <p>请把 W3School 的图片拖放到矩形中:</p> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br /> <img id="drag1" src="/i/w3school_banner.gif" draggable="true" ondragstart="drag(event)" /> </body> </html>
设置元素可拖动
一个img想放到div中,首先设置img可以被拖动 draggable=“true”
拖动什么 ondeagstart 、setData
元素拖动的时候会发生什么,drag(ev)这方法规定了被拖动的数据,ev.dataTransfer.setData(“Text”,ev.target.id) 设置被拖动数据的数据类型和值 例如Text是数据类型,id(“drag1”)是值
拖放到何处 -ondragover
ondragover设置在何处放置数据,默认是无法将数据放到其他元素中,所以需要重新设置,调用
event.preventDefault();
进行放置 - ondrop
当放置数据时,发生drop事件,调用一个drop函数
ev.preventDefault()设置浏览器对数据的处理方式,默认是以连接的形式打开的,但是去掉这一行也可以实现拖放
var data = ev.dataTransfrt.getData("Text"); 获取被拖放的数据
被拖的数据元素是id(“drag1”)
ev.target.appendChiled(document.getElementById(data))把获取到的数据加到指定的div中;
元素在两个div之间来回拖动,原理类似
<!DOCTYPE HTML> <html> <head> <style type="text/css"> #div1, #div2 {float:left; width:100px; height:35px; margin:10px;padding:10px;border:1px solid #aaaaaa;} </style> <script type="text/javascript"> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData("Text",ev.target.id); } function drop(ev) { var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); } </script> </head> <body> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"> <img src="/i/w3school_logo_black.gif" draggable="true" ondragstart="drag(event)" id="drag1" /> </div> <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div> </body> </html>