更新時間:2019-10-08 來源:黑馬程序員 瀏覽量:
1. 什么是拖拽?
本質(zhì)上來說就是一個對象和一個對象直接傳遞。其實學習拖拽,就是學習拖拽事件。
2.在HTML5中很多元素是不能進行拖拽的,比如說圖片和超鏈接,在試圖拖拽時你會發(fā)現(xiàn)一個禁止的符號,如果想拖拽元素,就必須為元素添加draggable="true"。(推薦了解黑馬程序員web前端培訓課程)
3.相關的事件:
應用于被拖拽元素的事件
ondrag 應用于拖拽元素,整個拖拽過程都會調(diào)用--持續(xù)
ondragstart 應用于拖拽元素,當拖拽開始時調(diào)用
ondragleave 應用于拖拽元素,當鼠標離開拖拽元素時調(diào)用
ondragend 應用于拖拽元素,當拖拽結束時調(diào)用
應用于目標元素的事件
ondragenter 應用于目標元素,當拖拽元素進入時調(diào)用
ondragover 應用于目標元素,當停留在目標元素上時調(diào)用
ondrop 應用于目標元素,當在目標元素上松開鼠標時調(diào)用
ondragleave 應用于目標元素,當鼠標離開目標元素時調(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){
}