更新時間:2019-10-08 來源:黑馬程序員 瀏覽量:
1. 什么是拖拽?
本質(zhì)上來說就是一個對象和一個對象直接傳遞。其實學(xué)習拖拽,就是學(xué)習拖拽事件。
2.在HTML5中很多元素是不能進行拖拽的,比如說圖片和超鏈接,在試圖拖拽時你會發(fā)現(xiàn)一個禁止的符號,如果想拖拽元素,就必須為元素添加draggable="true"。(推薦了解黑馬程序員web前端培訓(xùn)課程)
3.相關(guān)的事件:
應(yīng)用于被拖拽元素的事件
ondrag 應(yīng)用于拖拽元素,整個拖拽過程都會調(diào)用--持續(xù)
ondragstart 應(yīng)用于拖拽元素,當拖拽開始時調(diào)用
ondragleave 應(yīng)用于拖拽元素,當鼠標離開拖拽元素時調(diào)用
ondragend 應(yīng)用于拖拽元素,當拖拽結(jié)束時調(diào)用
應(yīng)用于目標元素的事件
ondragenter 應(yīng)用于目標元素,當拖拽元素進入時調(diào)用
ondragover 應(yīng)用于目標元素,當停留在目標元素上時調(diào)用
ondrop 應(yīng)用于目標元素,當在目標元素上松開鼠標時調(diào)用
ondragleave 應(yīng)用于目標元素,當鼠標離開目標元素時調(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">試著把我拖過去</p> <p id="pe1" draggable="true">試著也把我拖過去</p> </div> <div class="div2" id="div2"></div> <div class="div3" id="div3"></div> <script> var obj=null;//當前被拖拽的地元素 document.ondragstart=function(e){ /*通過事件捕獲來獲取當前被拖拽的子元素*/ e.target.style.opacity=0.5; e.target.parentNode.style.borderWidth="5px"; obj= e.target; /*通過dataTransfer來實現(xiàn)數(shù)據(jù)的存儲與獲取 * setData(format,data): * format:數(shù)據(jù)的類型:text/html text/uri-list * Data:數(shù)據(jù):一般來說是字符串值*/ 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(); } /*瀏覽器默認會阻止ondrop事件:我們必須在ondragover中阻止瀏覽器的默認行為*/ document.ondrop=function(e){ /*添加元素*/ //e.target.appendChild(obj); /*通過e.dataTransfer.setData存儲的數(shù)據(jù),只能在drop事件中獲取*/ var id=e.dataTransfer.getData("text/html"); /*console.log("id="+id);*/ e.target.appendChild(document.getElementById(id)); } document.ondragleave=function(e){ }