DataTransfer 物件

admin發表於2019-10-06

本文將從總體上對此物件進行一下分析,具體細節可以檢視對應的文章。

理解此物件,可以從其名稱入手,DataTransfer可以分解為如下兩個單詞:

(1).data:翻譯成漢語具有"資料"的意思。

(2).transfer:翻譯成漢語具有"轉移"或者"搬遷"的意思。

由此可以推測,此物件的功能是用於資料傳遞,事實也是如此。

DataTransfer型別物件在拖動操作中主要起到媒介作用,用於從源物件向目標物件傳遞資料。

在源物件中設定資料,然後在目標物件獲取,當然也有其他功能,後面有相關文章連結。

關於HTML5 拖拽的總體介紹可以參閱Drag & Drop 拖拽詳解一章節。

首先看一段程式碼例項:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
p{
  width:100px;
  height:50px;
  background-color:red;
}
#box {
  width:300px; 
  height:100px;
  background-color:#ccc;
}
</style>
<script>
window.onload = () =>{
  let odiv=document.getElementById("box");
  let op=document.getElementById("p");

  op.ondragstart = (ev) => {
    ev.dataTransfer.setData("Text",ev.target.id);
  }

  odiv.ondragover = (ev) => {
    ev.preventDefault();
  }

  odiv.ondrop = (ev) => {
    ev.preventDefault();
    ev.stopPropagation();
    let data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
  }
}
</script>
</head>
<body>
<p draggable="true" id="p"></p>
<div id="box"></div>
</body>
</html>

程式碼實現了簡單的拖拽效果,可以將紅色矩形移動到灰色矩形中。

下面介紹一下DataTransfer物件在其中所起到的作用。

[JavaScript] 純文字檢視 複製程式碼
op.ondragstart = (ev) => {
  ev.dataTransfer.setData("Text",ev.target.id);
}

當源元素被開始拖動的時候觸發dragstart事件,在此事件處理函式中可以規定傳遞的資料。

DataTransfer型別物件通過事件物件的dataTransfer屬性獲取。

上述程式碼通過setData()方法將源元素的id值儲存起來。

關於setData()的具體用法可以參閱文章底部的相關文章連結。

[JavaScript] 純文字檢視 複製程式碼
odiv.ondrop = (ev) => {
  ev.preventDefault();
  ev.stopPropagation();
  let data=ev.dataTransfer.getData("Text");
  ev.target.appendChild(document.getElementById(data));
}

當將源元素放置於目標元素中,完成拖拽時觸發drop事件。

通過getData()方法可以獲取通過setData()方法儲存的資料,也就是id屬性值。

可以看到DataTransfer物件的主要功能是作為一個資料傳遞中介,當然還有其他功能。

下面是此物件具有的屬性和方法相關文章:

(1).dataTransfer.effectAllowed 屬性一章節。

(2).dataTransfer.dropEffect 屬性一章節。

(3).dataTransfer.files 屬性一章節。

(4).dataTransfer.types 屬性一章節。

(5).dataTransfer.items 屬性一章節。

(6).dataTransfer.setData() 方法一章節。

(7).dataTransfer.getData() 方法一章節。

(8).dataTransfer.clearData() 方法一章節。

(9).dataTransfer.setDragImage() 方法一章節。

相關文章