| dragstart | 作用于[源元素],當一個元素開始被拖拽的時候觸發,用戶拖拽的元素需要附加dragstart事件。在這個事件中,監聽器將設置與這次拖拽相關的信息,例如拖動的數據和圖像。 |
| dragenter | 作用于[源元素],當拖拽中的鼠標進入一個元素的時候觸發。這個事件的監聽器需要指明是否允許在這個區域釋放鼠標。如果沒有設置監聽器,或者監聽器沒有進行操作,則默認不允許釋放。 |
| dragover | 作用于[目標元素],當拖拽中的鼠標移動經過一個元素的時候觸發。 |
| dragleave | 作用于[目標元素],當拖拽中的鼠標離開元素時觸發。可以作為可釋放反饋的高亮或插入標記去除。 |
| drag | 作用于[源元素],事件在元素被拖動時觸發。 |
| drop | 作用于[目標元素],在拖拽操作結束釋放時于釋放元素上觸發。 |
| dragend | 作用于[源元素],拖拽源在拖拽操作結束時觸發,不管操作成功與否。 |
(在拖拽的時候只會觸發拖拽的相關事件,鼠標事件,例如mousemove,是不會觸發的)
DataTransfer 對象
在處理拖放操作時,我們需要用到 DataTransfer 對象來保存被拖動的數據。 DataTransfer 可以保存一項或多項數據、一種或者多種數據類型。
屬性
| dropEffect | dropEffect [String]指定實際的放置效果,可能的值: copy: 復制到新的位置 move: 移動到新的位置 link: 建立一個源位置到新位置的鏈接 none: 禁止放置(禁止任何操作) |
| effectAllowed | [String]指定拖動時被允許的效果,可能的值: copy: 復制到新的位置. move:移動到新的位置 . link:建立一個源位置到新位置的鏈接. copyLink: 允許復制或者鏈接. copyMove: 允許復制或者移動. linkMove: 允許鏈接或者移動. all: 允許所有的操作. none: 禁止所有操作. uninitialized: 缺省值(默認值), 相當于 all. |
| files | 包含一個在數據傳輸上所有可用的本地文件列表。如果拖動操作不涉及拖動文件,此屬性是一個空列表。 |
| types | 保存一個被存儲數據的類型列表作為第一項,順序與被添加數據的順序一致。如果沒有添加數據將返回一個空列表。 |
方法
| void addElement(Element element) | 設置拖動源。通常不需要改變這項,如果修改這項將會影響拖動的哪個節點和dragend事件的觸發。默認目標是被拖動的節點 |
| void clearData(String type) | 刪除與給定類型關聯的數據。類型參數是可選的。如果類型為空或未指定,將刪除所有類型相關聯的數據。如果不存在指定類型的數據,或數據傳輸不包含任何數據,此方法將沒有任何效果。 |
| String getData(String type) | 獲得給定類型的數據,如果給定類型的數據不存在或者數據轉存沒有包涵數據,方法將返回一個空字符串。 |
| void setData(String type,String data) | 為一個給定的類型設置數據。如果該數據類型不存在,它將添加到的末尾,這樣類型列表中的最后一個項目將是新的格式。如果已經存在的數據類型,替換相同的位置的現有數據。就是,當更換相同類型的數據時,不會更改類型列表的順序。 |
| void setDragImage(DOMElement image,long x,long y) | 自定義一個期望的拖動時的圖片。大多數情況下,這項不用設置,因為被拖動的節點被創建成默認圖片。 image 要用作拖動反饋圖像元素 x 圖像內的水平偏移量. y 像內的垂直偏移量. |
瀏覽器支持
Internet Explorer 9+、Firefox、Opera 12、Chrome 以及 Safari 5+
演示代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Drag & Drop</title>
<style type="text/css">
.box {
display: inline-block;
width: 100px;
height: 100px;
border: 1px solid #ccccff;
background-color: #ccccff;
text-align: center;
line-height: 100px;
}
.bin {
width: 200px;
height: 200px;
padding: 10px;
border: 1px solid #ccccff;
overflow: hidden;
float: left;
}
</style>
</head>
<body>
<div style="display: table;">
<div class="bin">
<div class="box" draggable="true">可拖拽元素</div>
</div>
<div class="bin"> </div>
</div>
<script type="text/javascript">
var bins = document.querySelectorAll('.bin');
var boxs = document.querySelectorAll('.box');
var drag = null;
for (var i = 0; i < boxs.length; i++) {
var box = boxs[i];
box.onselectstart = function() {
return false;
};
box.ondragstart = function(e) {
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/plain', e.target.outerHTML);
e.dataTransfer.setDragImage(e.target, 0, 0);
drag = this;
return true;
};
box.ondragend = function(e) {
drag = null;
return false
};
}
for (var i = 0; i < bins.length; i++) {
var bin = bins[i];
//當拖曳元素進入目標元素
bin.ondragover = function(e) {
e.preentDefault();
return true;
};
//拖拽元素在目標元素上移動
bin.ondragenter = function(e) {
this.style.backgroundColor = '#eeeeff';
return true;
};
//拖拽元素在目標元素上離開
bin.ondragleave = function(e) {
this.style.backgroundColor = '#fff';
return true;
};
//拖拽的元素在目標元素上同時鼠標放開
bin.ondrop = function(e) {
if (drag) {
drag.parentNode.removeChild(drag);
this.appendChild(drag);
}
this.style.backgroundColor = '#fff';
return false;
};
}
document.body.ondrop = function(e) {
e.preventDefault();
e.stopPropagation();
}
</script>
</body>
</html>
以上就是HTML5中的拖放相關資料介紹,需要的朋友可以參考一下。