拖放(Drag 和 Drop)是很常见的特性。它指的是您抓取某物并拖入不同的位置。
拖放是 HTML5 标准的组成部分:任何元素都是可拖放的。
demo:
<!DOCTYPE html>
<html>
<meta charset="utf-8" />
<style>
#drop{
width: 150px;
height: 150px;
border: #000 1px solid;
}
</style>
<script>
function allowDrop(e) {
e.preventDefault();
console.info("拖到了这里")
}
function drag(ev) {
console.info("开始drag拖动")
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
console.info("放好了")
}
</script>
<body>
<section id="drag" draggable="true" ondragstart="drag(event)">
把我拖走
</section>
<section id="drop" ondrop="drop(event)" ondragover="allowDrop(event)">
放到这里
</section>
</body>
</html>
上面是两个section元素,id为drag的元素被拖动,放置到id为drop的元素中,
使用draggable把元素设置为可拖放
<section id="drop" draggable="true">
ondragstart:开始拖动时调用drag方法
ondragover:id为drag的元素被拖动到了id为drop的元素上方时,调用allowDrop方法
ondrop:放置完成时调用drop方法
来回拖放
<!DOCTYPE html>
<html>
<meta charset="utf-8" />
<style>
section{
width: 150px;
height: 150px;
border: #000 1px solid;
}
</style>
<script>
function allowDrop(e) {
e.preventDefault();
console.info("拖到了这里")
}
function drag(ev) {
console.info("开始drag拖动")
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
console.info("放好了")
}
</script>
<body>
<section id="box1" ondrop="drop(event)" ondragover="allowDrop(event)">
</section>
<p id="drag" draggable="true" ondragstart="drag(event)">把我拖走</p>
<section id="box2" ondrop="drop(event)" ondragover="allowDrop(event)">
</section>
</body>
</html>