drop事件及拖動文件(梁王的理論自習(xí)室)

前言

最近在做一個音樂播放器饼拍,里面想玩幾個騷操作,其中有個子功能是拖動文件蓖乘,特總結(jié)一下飘言。

相關(guān)事件

先來介紹一下相關(guān)的事件
在拖放的過程中會觸發(fā)以下事件:
以下是拖拽產(chǎn)生的一系列事件,拖拽事件產(chǎn)生時不會產(chǎn)生對應(yīng)的鼠標(biāo)事件.

  • dragstart:拖拽開始時在被拖拽元素上觸發(fā)此事件,監(jiān)聽器需要設(shè)置拖拽所需數(shù)據(jù),從操作系統(tǒng)拖拽文件到瀏覽器時不觸發(fā)此事件.
  • dragenter:拖拽鼠標(biāo)進(jìn)入元素時在該元素上觸發(fā),用于給拖放元素設(shè)置視覺反饋,如高亮
  • dragover:拖拽時鼠標(biāo)在目標(biāo)元素上移動時觸發(fā).監(jiān)聽器通過阻止瀏覽器默認(rèn)行為設(shè)置元素為可拖放元素.
  • dragleave:拖拽時鼠標(biāo)移出目標(biāo)元素時在目標(biāo)元素上觸發(fā).此時監(jiān)聽器可以取消掉前面設(shè)置的視覺效果.
  • drag:拖拽期間在被拖拽元素上連續(xù)觸發(fā)
  • drop:鼠標(biāo)在拖放目標(biāo)上釋放時,在拖放目標(biāo)上觸發(fā).此時監(jiān)聽器需要收集數(shù)據(jù)并且執(zhí)行所需操作.如果是從操作系統(tǒng)拖放文件到瀏覽器,需要取消瀏覽器默認(rèn)行為.
  • dragend:鼠標(biāo)在拖放目標(biāo)上釋放時,在拖拽元素上觸發(fā).將元素從瀏覽器拖放到操作系統(tǒng)時不會觸發(fā)此事件.

不過我只用了ondragoverondragend還有ondrop

值得注意的一點

使用這些事件實現(xiàn)拖動文件(項目中是拖動音頻文件到指定區(qū)域)的時候要記住使用event.preventDefault()。
chrome瀏覽器的drop事件的默認(rèn)行為是打開被放到放置目標(biāo)上的URL辣往。為了讓chrome支持正常的拖放兔院,還要取消drop事件的默認(rèn)行為,不過實現(xiàn)的時候我必須要在dragover上也加preventDefault才行,應(yīng)該是dragover也有默認(rèn)行為是打開url吧站削,知道的讀者請回復(fù)告知我坊萝。

DataTransfer對象

DataTransfer

先上MDN

DataTransfer - MDN

總的來說就是拖動完后可以通過這個對象獲取數(shù)據(jù)信息。

核心屬性

比較核心的屬性是files包含一個在數(shù)據(jù)傳輸上所有可用的本地文件列表许起。如果拖動操作不涉及拖動文件十偶,此屬性是一個空列表。此屬性訪問指定的FileList
中無效的索引將返回未定義(undefined)街氢。

一個奇怪的情況

先上代碼

// vue里面事件綁定扯键,綁定drop事件
@drop.prevent="uploadMusic($event)"
...
uploadMusic(event) {
    let self = this
    console.dir(event)
    console.dir(event.dataTransfer)
    console.dir(event.dataTransfer.files[0])
    let file = event.dataTransfer.files[0]
    ...
},

很迷的情況是我console.dir(event.dataTransfer)時files為空數(shù)組length為0
然而我event.dataTransfer.files[0]結(jié)果卻有。很奇怪啊珊肃,請知道的讀者留言告訴我怎么回事荣刑。

DataTransfer的其他方法(待補充)

反正現(xiàn)在只用到了dataTransfer里面的files,獲取從操作系統(tǒng)拖曳出來的文件伦乔。event.dataTransfer.files[0]

實戰(zhàn) (聯(lián)動)

現(xiàn)在我們做一個demo吧厉亏,拖曳音樂到指定區(qū)域,然后播放出音樂來烈和。

聯(lián)動
Audio對象(梁王的理論自習(xí)室)(未完成)
音樂拖動上傳播放(梁王的開發(fā)筆記)(未完成)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爱只,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子招刹,更是在濱河造成了極大的恐慌恬试,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯暑,死亡現(xiàn)場離奇詭異训柴,居然都是意外死亡,警方通過查閱死者的電腦和手機妇拯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門幻馁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洗鸵,“玉大人,你說我怎么就攤上這事仗嗦”毂酰” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵稀拐,是天一觀的道長火邓。 經(jīng)常有香客問我,道長钩蚊,這世上最難降的妖魔是什么贡翘? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮砰逻,結(jié)果婚禮上鸣驱,老公的妹妹穿的比我還像新娘。我一直安慰自己蝠咆,他們只是感情好踊东,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刚操,像睡著了一般闸翅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上菊霜,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天坚冀,我揣著相機與錄音,去河邊找鬼鉴逞。 笑死记某,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的构捡。 我是一名探鬼主播液南,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勾徽!你這毒婦竟也來了滑凉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喘帚,失蹤者是張志新(化名)和其女友劉穎畅姊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吹由,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡涡匀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了溉知。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖级乍,靈堂內(nèi)的尸體忽然破棺而出舌劳,到底是詐尸還是另有隱情,我是刑警寧澤玫荣,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布甚淡,位于F島的核電站,受9級特大地震影響捅厂,放射性物質(zhì)發(fā)生泄漏贯卦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一焙贷、第九天 我趴在偏房一處隱蔽的房頂上張望撵割。 院中可真熱鬧,春花似錦辙芍、人聲如沸啡彬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庶灿。三九已至,卻和暖如春吃衅,著一層夾襖步出監(jiān)牢的瞬間往踢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工徘层, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峻呕,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓惑灵,卻偏偏與公主長得像山上,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子英支,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容