时间触发的顺序:dragstart(drag元素) -> drag(drag元素) -> dragenter(drop元素) -> dragover(drop元素) -> dragleave(drop元素) -> drop(drop元素) -> dragend(drag元素)
- 设置元素为可拖动
<div draggable="true"></div>//将draggable属性设置为true
- 拖动的元素
<div draggable="true" ondragstart="drag(event)"></div>
//规定被拖动的数据
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);//数据类型(text)和值(可拖动元素的id)
}
- 放置的位置
<div ondragover="allowDrop(event)"></div>
function allowDrop(event){
event.preventDefault();
}
- 进行放置
<div ondragover="allowDrop(event)" ondrop="drop(event)"></div>
function drop(ev){
ev.preventDefault();
var data=ev.data.Transfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
例子(多个div交换位置)
<div id="div1" draggable="true" ondragover="allowDrop(event)" ondrop="drop(event,this)" ondragstart="drag(event, this)"></div>
<div id="div2" draggable="true" ondragover="allowDrop(event)" ondrop="drop(event,this)" ondragstart="drag(event, this)"></div>
<script>
function allowDrop(ev)
{
ev.preventDefault();
}
let srcDiv = null;
function drag(ev,divDom)
{
srcDiv=divDom;
ev.dataTransfer.setData("text/html",divDom.innerHTML);
}
function drop(ev,divDom)
{
ev.preventDefault();
if(srcDiv !== divDom){
srcDiv.innerHTML = divDom.innerHTML;
divDom.innerHTML=ev.dataTransfer.getData("text/html");
}
}
</script>
兼容ie时,setData(“text”,元素内容);只支持text