拖放事件
拖動某元素時恨搓,將依次觸發(fā)下列事件(被拖動元素):
- dragstart
按下鼠標并開始移動鼠標時在被拖動元素身上觸發(fā)搀庶。 - drag
繼dragstrat觸發(fā)后蜜暑,繼續(xù)拖動會持續(xù)觸發(fā)drag事件 - dragend
當拖動停止時添谊,會觸發(fā)dragend事件
當某個元素被拖動到了一個有效的放置目標上時,下列事件會依次發(fā)生(放置目標):
- dragenter
只要有元素被拖動到放置目標上侄榴,就會觸發(fā)dragenter事件 - dragover
繼dragenter后,在被拖動的元素還在放置目標的范圍內移動网沾,就會持續(xù)觸發(fā)該事件 - dragleave或drop
如果元素被拖出了放置目標癞蚕,觸發(fā)dragleave事件,如果元素被放到了放置目標中辉哥,會觸發(fā)drop事件而不是dragleave事件桦山。
自定義放置目標
在拖動元素經過某些無效放置目標時,可以看到有特殊的光標(圓環(huán)帶斜線)來提示用戶不能把元素放置在該目標上面证薇,這些放置目標默認是不允許放置的度苔,不管用戶如何操作,都不會發(fā)生drop事件浑度。
把元素變成有效的放置目標的方法:
重寫dragenter和drogover事件的默認行為
EventUtil.addHandler(droptarget,"dragover",function(event){
EventUtil.preventDefalut(event);
})
...
以上代碼執(zhí)行后,光標變成了允許放置的符號鸦概。釋放鼠標也會觸發(fā)drop事件箩张。
由于在Firfox瀏覽器中,放置事件的默認行為是打開被放到放置目標的URL
因此還要取消drop事件的默認行為窗市,阻止它打開URL
dataTransfer對象
dataTransfer是事件對象的一個屬性先慷,用于從被拖動元素向放置目標傳遞字符串格式的數據
- setData()
接收兩個參數,參數一是一個字符串咨察,表示保存的數據類型论熙,可設置為"text"或"URL"
參數二為該類型的值 - getData()
接收一個表示保存的數據類型的參數,返回傳入setData()第二個參數的值
注意: 保存在dataTransfer對象中的數據只能在drop事件處理程序中讀取摄狱,否則dataTransfer被銷毀脓诡,數據也就丟失了。
瀏覽器的默認處理
在拖動文本框的文本時媒役,瀏覽器會調用setData()方法祝谚,將拖動的文本以“text”格式保存在dataTransfer對象中,在拖動鏈接或圖像時酣衷,會調用setData()保存URL交惯,然后被拖動到放置目標是,就可以通過getData()讀取這些數據穿仪。
我們也可以在dragStart事件處理程序中調用setData()席爽,手工保存自己要傳輸的數據,以便將來使用啊片。
dropEffect與effectAllowed
dropEffect屬性可以知道被拖動的元素能夠執(zhí)行哪種放置行為(改變光標的樣式)只锻,有四個可能的值
- "none"
不能把拖動的元素放在這里,這是除文本框之外所有元素的默認值 - "move"
應該把拖動的元素移動到放置目標 - "copy"
應該把拖動的元素復制到放置目標 - "link:
表示放置目標會打開拖動的元素钠龙。
effectAllowed屬性表示允許拖動元素的哪種dropEffect
- "uninitiallized"
沒有給被拖動的元素設置任何放置行為 - "none"
被拖動的元素不能有任何行為 - "copy"
- "link"
- "move"
- "copyLink"
- "copyMove"
- "linkMove"
- "all"
允許任意dropEffect炬藤。
可拖動
默認情況下御铃,圖像、鏈接和文本是可以拖動的沈矿,讓其他元素可以拖動的方法是設置元素的draggable屬性為true
其他成員(兼容性較差)
HTML5規(guī)范規(guī)定dataTransfer還有以下方法和屬性
- addElement(element)
- clearData(format)
- setDragImage(element,x,y)
- types