天天看點

HTML5之畫布的拖拽/拖放

<!DOCTYPE HTML>

<html>

<head>

<script type="text/javascript">

function allowDrop(ev){

ev.preventDeafault();

}

function drag(ev){

ev.dataTranster.setData("Text",ev.target.id);

function drop(ev){

 var data=ev.dataTransfer.getData("Text");

ev.target.appendChild(document.getElementById(data));

ev.preventDefault();

</script>

</head>

<body>

<div id ="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69" />

</body>

</html>

使得一個元素能夠拖動

很easy。僅僅須要将一個元素的拖動屬性改動為draggable,例如以下:

  1. <img draggable="true" />

怎樣拖動 - ondragstart() 和 setData()方法

然後,我們指定當一個元素拖動的時候會運作的操作。

在上面的示範中。ondragstart屬性調用了一個方法, drag(event)。這裡指定了那個資料被拖動。

dataTransfer.setData()方法設定了資料類型和被拖動的資料:

  1. ev.dataTransfer.setData("Text",ev.target.id);

在這裡樣例中。data type是"Text",數值是被拖動元素的ID。

哪裡去放置(drop) - ondragover

ondragover事件指定了拖動的元素能夠被放置的位置。

預設,資料/元素不能被drop到另外的元素。 為了同意drop,你須要先阻止預設的處理方式。我們能夠調用event.preventDefault()方法,例如以下:

  1. event.preventDefault()

運作放置(drop)

當可拖動的資料被drop的時候,drop事件觸發。

  1. function drop(ev)
  2. {
  3. var data=ev.dataTransfer.getData("Text");
  • 使用dataTransfer.getData("Text")得到被拖動的資料。這種方法将會傳回setData()方法中設定的不論什麼資料。 
  • 被拖動的資料是能夠拖動元素("drag1")的id
  • 加入可拖動的元素到放置的元素
  • 調用preventDefault()方法來阻止浏覽器的預設資料處理方式(比如,打開連結)

繼續閱讀