更新時(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){
}1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營(yíng)】深圳跨境電商運(yùn)營(yíng)畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級(jí)93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開(kāi)發(fā)】上海校區(qū)AI鴻蒙開(kāi)發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19