1. 程式人生 > >拖放效果原理

拖放效果原理

摘錄一些 比較重要的物件和事件以及屬性

* 首先,要使元素能否能被拖拽,必須設定 draggable  = "true"  例如:<div  draggable =“true”>只有設定draggable才可以被拖拽</div>

* 一個很很重要的介面 DataTransfer,它是拖拽物件用來傳遞的媒介,它包含以下屬性和方法

  • dataTransfer.dropEffect [ = value ]:返回已選擇的拖放效果,如果該操作效果與起初設定的effectAllowed效果不符,則拖拽操作失敗。可以設定修改,包含這幾個值:“none”, “copy”, “link” 和 “move”
  • dataTransfer.effectAllowed [ = value ]:返回允許執行的拖拽操作效果,可以設定修改,包含這些值:“none”, “copy”, “copyLink”, “copyMove”, “link”, “linkMove”, “move”, “all” 和 “uninitialized”
  • dataTransfer.types:返回在dragstart事件出發時為元素儲存資料的格式,如果是外部檔案的拖拽,則返回”files”
  • dataTransfer.clearData ( [ format ] ):刪除指定格式的資料,如果未指定格式,則刪除當前元素的所有攜帶資料
  • dataTransfer.setData(format, data):為元素新增指定資料
  • dataTransfer.getData(format):返回指定資料,如果資料不存在,則返回空字串
  • dataTransfer.files:如果是拖拽檔案,則返回正在拖拽的檔案列表FileList
  • dataTransfer.setDragImage(element, x, y):制定拖拽元素時跟隨滑鼠移動的圖片,x、y分別是相對於滑鼠的座標(據測試,Chrome暫不支援)
  • dataTransfer.addElement(element):新增一起跟隨拖拽的元素,如果你想讓某個元素跟隨被拖拽元素一同被拖拽,則使用此方法(據測試,Chrome暫不支援)

Drag & Drop 包括以下事件:

  • dragstart:要被拖拽的元素開始拖拽時觸發,這個事件物件是被拖拽元素
  • dragenter:拖拽元素進入目標元素時觸發,這個事件物件是目標元素
  • dragover:拖拽某元素在目標元素上移動時觸發,這個事件物件是目標元素
  • dragleave:拖拽某元素離開目標元素時觸發,這個事件物件是目標元素
  • dragend:在drop之後觸發,就是拖拽完畢時觸發,這個事件物件是被拖拽元素
  • drop:將被拖拽元素放在目標元素內時觸發,這個事件物件是目標元素

注意:在ondragover中一定要執行preventDefault(),否則ondrop事件不會被觸發。另外,如果是從其他應用軟體或是檔案中拖東西進來,尤其是圖片的時候,預設的動作是顯示這個圖片或是相關資訊,並不是真的執行drop。此時需要用用document的ondragover事件把它直接幹掉。


DataTransfer 物件:退拽物件用來傳遞的媒介,使用一般為Event.dataTransfer。
draggable 屬性:就是標籤元素要設定draggable=true,否則不會有效果,例如:
<div title="拖拽我" draggable="true">列表1</div>
ondragstart 事件:當拖拽元素開始被拖拽的時候觸發的事件,此事件作用在被拖曳元素上
ondragenter 事件:當拖曳元素進入目標元素的時候觸發的事件,此事件作用在目標元素上
ondragover 事件:拖拽元素在目標元素上移動的時候觸發的事件,此事件作用在目標元素上
ondrop 事件:被拖拽的元素在目標元素上同時滑鼠放開觸發的事件,此事件作用在目標元素上
ondragend 事件:當拖拽完成後觸發的事件,此事件作用在被拖曳元素上
Event.preventDefault() 方法:阻止預設的些事件方法等執行。在ondragover中一定要執行preventDefault(),否則ondrop事件不會被觸發。另外,如果是從其他應用軟體或是檔案中拖東西進來,尤其是圖片的時候,預設的動作是顯示這個圖片或是相關資訊,並不是真的執行drop。此時需要用用document的ondragover事件把它直接幹掉。
Event.effectAllowed 屬性:就是拖拽的效果。