Javascript知識整理——拖放

拖放事件

拖動某元素時恨搓,將依次觸發(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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末上真,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子羹膳,更是在濱河造成了極大的恐慌睡互,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陵像,死亡現場離奇詭異就珠,居然都是意外死亡,警方通過查閱死者的電腦和手機醒颖,發(fā)現死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門妻怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泞歉,你說我怎么就攤上這事逼侦。” “怎么了腰耙?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵榛丢,是天一觀的道長。 經常有香客問我挺庞,道長晰赞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任选侨,我火速辦了婚禮掖鱼,結果婚禮上,老公的妹妹穿的比我還像新娘侵俗。我一直安慰自己锨用,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布隘谣。 她就那樣靜靜地躺著增拥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寻歧。 梳的紋絲不亂的頭發(fā)上掌栅,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音码泛,去河邊找鬼猾封。 笑死,一個胖子當著我的面吹牛噪珊,可吹牛的內容都是我干的晌缘。 我是一名探鬼主播齐莲,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼磷箕!你這毒婦竟也來了选酗?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤岳枷,失蹤者是張志新(化名)和其女友劉穎芒填,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體空繁,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡殿衰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了盛泡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闷祥。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饭于,靈堂內的尸體忽然破棺而出蜀踏,到底是詐尸還是另有隱情,我是刑警寧澤掰吕,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站颅痊,受9級特大地震影響殖熟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜斑响,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一菱属、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舰罚,春花似錦纽门、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饲漾,卻和暖如春蝙搔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背考传。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工吃型, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人僚楞。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓勤晚,卻偏偏與公主長得像枉层,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赐写,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容