DataTransferItemList
DataTransferItemList 物件是 DataTransferItem 物件的列表,表示正在拖動的項。在拖動操作期間,每個 DragEvent 都有一個 dataTransfer 屬性,該屬性是 DataTransferItemList。
可以使用 方括號表示法 [] 訪問單個項。
DataTransferItemList 主要為 HTML 拖放 API 設計,並且仍然在 HTML 拖放部分進行指定,但現在也被其他 API 使用,例如 ClipboardEvent.clipboardData 和 InputEvent.dataTransfer。DataTransferItemList 的文件將主要討論其在拖放操作中的用法,您應該參考其他 API 的文件以瞭解 DataTransferItemList 在這些上下文中的用法。
此介面沒有建構函式。
例項屬性
DataTransferItemList.length只讀-
一個
unsigned long,表示列表中拖動項的數量。
例項方法
DataTransferItemList.add()-
將一個項(可以是
File物件或字串)新增到拖動項列表中,並返回新項的DataTransferItem物件。 DataTransferItemList.remove()-
從列表中刪除指定索引處的拖動項。
DataTransferItemList.clear()-
從列表中刪除所有拖動項。
示例
此示例顯示瞭如何使用拖放。
HTML
html
<div>
<p id="source" draggable="true">
Select this element, drag it to the Drop Zone and then release the selection
to move the element.
</p>
</div>
<div id="target">Drop Zone</div>
CSS
css
div {
margin: 0em;
padding: 2em;
}
#source {
color: blue;
border: 1px solid black;
}
#target {
border: 1px solid black;
}
JavaScript
js
const source = document.getElementById("source");
const target = document.getElementById("target");
source.addEventListener("dragstart", (ev) => {
console.log("dragStart");
// Add this element's id to the drag payload so the drop handler will
// know which element to add to its tree
const dataList = ev.dataTransfer.items;
dataList.add(ev.target.id, "text/plain");
// Add some other items to the drag payload
dataList.add("<p>Paragraph…</p>", "text/html");
dataList.add("http://www.example.org", "text/uri-list");
});
source.addEventListener("dragend", (ev) => {
console.log("dragEnd");
const dataList = ev.dataTransfer.items;
// Clear any remaining drag data
dataList.clear();
});
target.addEventListener("drop", (ev) => {
console.log("Drop");
ev.preventDefault();
// Loop through the dropped items and log their data
for (const item of ev.dataTransfer.items) {
if (item.kind === "string" && item.type.match(/^text\/plain/)) {
// This item is the target node
item.getAsString((s) => {
ev.target.appendChild(document.getElementById(s));
});
} else if (item.kind === "string" && item.type.match(/^text\/html/)) {
// Drag data item is HTML
item.getAsString((s) => {
console.log(`… Drop: HTML = ${s}`);
});
} else if (item.kind === "string" && item.type.match(/^text\/uri-list/)) {
// Drag data item is URI
item.getAsString((s) => {
console.log(`… Drop: URI = ${s}`);
});
}
}
});
target.addEventListener("dragover", (ev) => {
console.log("dragOver");
ev.preventDefault();
// Set the dropEffect to move
ev.dataTransfer.dropEffect = "move";
});
結果
規範
| 規範 |
|---|
| HTML # the-datatransferitemlist-interface |
瀏覽器相容性
載入中…