国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js實現控制文件拖拽并獲取拖拽內容功能

2024-05-06 15:21:46
字體:
來源:轉載
供稿:網友

在用戶拖拽文件到瀏覽器的某個元素上時,js可以監聽到與拖拽相關的事件,并對拖拽結果進行處理,本文討論下和拖拽文件相關的一些問題,不過沒有處理太多關于兼容性的問題。

拖拽事件

js能夠監聽到拖拽的事件有drag、dragend、dragenter、dragexit(沒有瀏覽器實現)、dragleave、dragover、dragstart、drop,詳細的內容可以看MDN。

其中,與拖拽文件相關的事件有dragenter(文件拖拽進)、dragover(文件拖拽在懸浮)、dragleave(文件拖拽離開)、drop(文件拖拽放下)。

拖拽事件可以綁定到指定的DOM元素上,可以綁定到整個頁面中。

var dropEle = document.querySelector('#dropZone');dropEle.addEventListener('drop', function (e) {  // }, false);document.addEventListener('drop', function (e) {  // }, false);

阻止默認行為

一般來說,我們只需要把處理拖拽文件的業務邏輯寫到drop事件中就可以了,為什么還要綁定dragenter、dragover、dragleave這三個事件呢?

因為當你拖拽一個文件到沒有對拖拽事件進行處理的瀏覽器中的時候,瀏覽器會打開這個文件,比如拖拽一張圖片瀏覽器會打開這個圖片,在沒有PDF閱讀器的時候也可以拖拽一個PDF到瀏覽器中,瀏覽器就會打開這個PDF文件。

如果瀏覽器打開了拖拽的文件,頁面就跳走了,我們希望得到拖拽的文件,而不是讓頁面跳走。上面說到瀏覽器會打開拖拽的文件是瀏覽器的默認行為,我們需要阻止這個默認行為,就需要再上述的事件中進行阻止。

dropZone.addEventListener("dragenter", function (e) {  e.preventDefault();  e.stopPropagation();}, false);dropZone.addEventListener("dragover", function (e) {  e.preventDefault();  e.stopPropagation();}, false);dropZone.addEventListener("dragleave", function (e) {  e.preventDefault();  e.stopPropagation();}, false);dropZone.addEventListener("drop", function (e) {  e.preventDefault();  e.stopPropagation();  // 處理拖拽文件的邏輯}

實際上dragenter不阻止默認行為也不會觸發瀏覽器打開文件,為了防止某些瀏覽器可能有的兼容性問題,把拖拽周期中的所有的事件都阻止默認行為并且阻止了事件冒泡。

獲得拖拽的文件

我們會在drop這個事件的回調中的事件對象能夠得到文件對象。

在事件對象中,一個e.dataTransfer這樣的屬性,它是一個DataTransfer類型的數據,有如下的屬性

屬性 類型 說明
dropEffect String 用來hack某些兼容性問題
effectAllowed String 暫時不用
files FileList 拖拽的文件列表
items DataTransferItemList 拖拽的數據(有可能是字符串)
types Array 拖拽的數據類型 該屬性在Safari下比較混亂
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 惠来县| 宝坻区| 乐山市| 常熟市| 延安市| 方城县| 瓦房店市| 牟定县| 木兰县| 石城县| 筠连县| 麻栗坡县| 桂林市| 安塞县| 北票市| 陕西省| 洛浦县| 芜湖市| 明水县| 滦平县| 沽源县| 卢龙县| 东兰县| 称多县| 瓮安县| 建始县| 娄底市| 额济纳旗| 屏东县| 长垣县| 嘉禾县| 大洼县| 池州市| 堆龙德庆县| 永寿县| 姜堰市| 通榆县| 云和县| 邮箱| 太谷县| 武宁县|