- 可拖拽的元素:定义draggable熟悉指明元素可拖拽(文本、图片默认可拖拽)
- 可放置的区域:监听dragover事件,阻止事件默认行为(返回false或者调用
e.preventDefault()
)指明该区域可放置元素。此事件会被浏览器频繁调用,应减少这里的逻辑。 - 可放置的区域:如果该区域可放置元素则会触发drop事件,否则不触发。
- 将元素放置在可放置区域需要在drop事件中需要自行操作,如使用appendChild。
简单示例:
<script>
function drag_handler(ev) {
console.log("Drag");
}
function dragstart_handler(ev) {
console.log("dragStart");
ev.dataTransfer.setData("text", ev.target.id);
}
function drop_handler(ev) {
console.log("Drop");
ev.currentTarget.style.background = "lightyellow";
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
function dragover_handler(ev) {
console.log("dragOver");
ev.preventDefault();
}
</script>
<body>
<h1>Examples of <code>ondrag</code>, <code>ondrop</code>, <code>ondragstart</code>, <code>ondragover</code></h1>
<div>
<p id="source" ondrag="drag_handler(event);" ondragstart="dragstart_handler(event);" draggable="true">
Select this element, drag it to the Drop Zone and then release the selection to move the element.</p>
</div>
<div id="target" ondrop="drop_handler(event);" ondragover="dragover_handler(event);">Drop Zone</div>
</body>