</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>