更新時(shí)間:2019-10-08 來(lái)源:黑馬程序員 瀏覽量:
1. 什么是拖拽?
本質(zhì)上來(lái)說(shuō)就是一個(gè)對(duì)象和一個(gè)對(duì)象直接傳遞。其實(shí)學(xué)習(xí)拖拽,就是學(xué)習(xí)拖拽事件。
2.在HTML5中很多元素是不能進(jìn)行拖拽的,比如說(shuō)圖片和超鏈接,在試圖拖拽時(shí)你會(huì)發(fā)現(xiàn)一個(gè)禁止的符號(hào),如果想拖拽元素,就必須為元素添加draggable="true"。(推薦了解黑馬程序員web前端培訓(xùn)課程)
3.相關(guān)的事件:
應(yīng)用于被拖拽元素的事件
ondrag 應(yīng)用于拖拽元素,整個(gè)拖拽過(guò)程都會(huì)調(diào)用--持續(xù)
ondragstart 應(yīng)用于拖拽元素,當(dāng)拖拽開(kāi)始時(shí)調(diào)用
ondragleave 應(yīng)用于拖拽元素,當(dāng)鼠標(biāo)離開(kāi)拖拽元素時(shí)調(diào)用
ondragend 應(yīng)用于拖拽元素,當(dāng)拖拽結(jié)束時(shí)調(diào)用
應(yīng)用于目標(biāo)元素的事件
ondragenter 應(yīng)用于目標(biāo)元素,當(dāng)拖拽元素進(jìn)入時(shí)調(diào)用
ondragover 應(yīng)用于目標(biāo)元素,當(dāng)停留在目標(biāo)元素上時(shí)調(diào)用
ondrop 應(yīng)用于目標(biāo)元素,當(dāng)在目標(biāo)元素上松開(kāi)鼠標(biāo)時(shí)調(diào)用
ondragleave 應(yīng)用于目標(biāo)元素,當(dāng)鼠標(biāo)離開(kāi)目標(biāo)元素時(shí)調(diào)用
案例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; } .div1{ width: 200px; height: 200px; border: 1px solid red; position: relative; margin-left:20px; float: left; } .div2{ width: 200px; height: 200px; border: 1px solid blue; position: relative; margin-left:20px; float: left; } .div3{ width: 200px; height: 200px; border: 1px solid green; position: relative; margin-left:20px; float: left; } p{ background-color: orange; margin-top: 5px; } </style> </head> <body> <div class="div1" id="div1"> <p id="pe" draggable="true">試著把我拖過(guò)去</p> <p id="pe1" draggable="true">試著也把我拖過(guò)去</p> </div> <div class="div2" id="div2"></div> <div class="div3" id="div3"></div> <script> var obj=null;//當(dāng)前被拖拽的地元素 document.ondragstart=function(e){ /*通過(guò)事件捕獲來(lái)獲取當(dāng)前被拖拽的子元素*/ e.target.style.opacity=0.5; e.target.parentNode.style.borderWidth="5px"; obj= e.target; /*通過(guò)dataTransfer來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)與獲取 * setData(format,data): * format:數(shù)據(jù)的類型:text/html text/uri-list * Data:數(shù)據(jù):一般來(lái)說(shuō)是字符串值*/ e.dataTransfer.setData("text/html", e.target.id); } document.ondragend=function(e){ e.target.style.opacity=1; e.target.parentNode.style.borderWidth="1px"; } document.ondragleave=function(e){ } document.ondrag=function(e){ } document.ondragenter=function(e){ console.log(e.target); } document.ondragover=function(e){ e.preventDefault(); } /*瀏覽器默認(rèn)會(huì)阻止ondrop事件:我們必須在ondragover中阻止瀏覽器的默認(rèn)行為*/ document.ondrop=function(e){ /*添加元素*/ //e.target.appendChild(obj); /*通過(guò)e.dataTransfer.setData存儲(chǔ)的數(shù)據(jù),只能在drop事件中獲取*/ var id=e.dataTransfer.getData("text/html"); /*console.log("id="+id);*/ e.target.appendChild(document.getElementById(id)); } document.ondragleave=function(e){ }