2016-06-29 75 views
6

根據the documentation在HTML5拖放API,當一個元件被丟棄兩個事件觸發:dragend和drop事件之間是否有定義的順序?

  1. drop事件從放置目標
  2. dragend事件從源發射發射拖動

在做一個簡單的測試(見段),該drop事件始終閃光只是dragend事件(至少在鉻)之前,但我無法找到有關這些事件在SP的訂購任何東西EC。

是定義這些事件的順序,還是以任意順序自由觸發?

function allowDrop(ev) { 
 
    ev.preventDefault(); 
 
} 
 

 
function drag(ev) { 
 
    ev.dataTransfer.setData("text", ev.target.id); 
 
} 
 

 
function drop(ev) { 
 
    console.log("drop at " + Date.now()); 
 
    ev.preventDefault(); 
 
    var data = ev.dataTransfer.getData("text"); 
 
    ev.target.appendChild(document.getElementById(data)); 
 
} 
 

 
function dragend(ev) { 
 
    console.log("dragend at " + Date.now()); 
 
}
#div1 { 
 
    background-color: red; 
 
    height: 100px; 
 
    width: 100px; 
 
} 
 
#drag1 { 
 
    background-color: green; 
 
    height: 50px; 
 
    width: 50px; 
 
}
<div>Drag the green square in to the red one</div> 
 

 
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)" width="100px" height="100px"></div> 
 

 
<div id="drag1" draggable="true" ondragstart="drag(event)" ondragend="dragend(event)" width="50px" height="50px">

+0

這是對Firefox相同的順序 – gal007

回答

6

根據當前規定的drag-and-drop processing model(更新2017年5月8日)HTML規範中,drop()事件必須的dragend()事件之前進行發射

相應信息被深深嵌套在文檔中,但是描述的拖動操作的結束的部分看起來如下(遺漏和重點煤礦):

否則,如果用戶結束了拖和(例如,通過在鼠標驅動的拖放界面中釋放鼠標按鈕,通過 ),或者如果drag事件被取消,則這將是最後的 迭代。執行下列步驟,然後停止拖動和拖放操作 :

  1. [...]
    否則,拖拽操作可能是成功的;運行這些子步驟:
    1. 下降爲真。
    2. 如果當前目標元素是DOM元素,則在其上觸發名爲drop的DND事件;否則,請使用平臺特定的 約定來指示放置。
    3. [...]
  2. 火命名爲dragend在源節點的DND事件。
  3. [...]
相關問題