成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

功能問題:如何實現文件的拖拽上傳?

開發 前端
本文簡單介紹了,元素拖拽的6個API,以及文件拖拽上傳的實現過程。元素拖拽的6個API,這里我們只需要使用Dragover、Drop這兩個,就能實現文件拖拽上傳。

1. 需求分析

文件上傳,可以說是我們在項目中最常用的功能之一。

文件上傳一般有兩種形式:點擊上傳和拖拽上傳。而上傳的內容,又大體包括:文件和文件夾。

在項目中,我們一般都會直接選擇使用UI庫提供的上傳組件,簡單配置一下必要的屬性,就實現了文件上傳功能,至于組件底層實現的原理,是絲毫不知。

所以今天,針對文件和文件夾的拖拽上傳功能,我整理了一下具體的實現,很簡單一起瞧瞧。

2. 問題實現

先普及一下元素拖拽的幾個API知識點,再放上文件拖拽上傳的實現代碼,并做簡單的描述,最后做小結。

(1)拖拽的6個API

元素拖拽的6個API分別是:dragenter、dragover、drop 以及dragstart、drag、dragend。

ondragstart 事件:該事件在拖動操作開始時觸發,即拖動操作的起點。通常在該事件的處理函數中設置拖動的數據和效果。

drag 事件:該事件在元素正在被拖動時持續觸發,即在拖動過程中。可以在該事件的處理函數中執行一些實時的操作,例如更新元素的位置或顯示一些效果。

dragend 事件:該事件在拖動操作結束時觸發,即拖動操作的終點。通常在該事件的處理函數中執行一些清理操作或其他邏輯。

這三個事件通常用于控制拖動元素起始、過程和結束階段的行為。

ondragenter 事件:該事件在拖動元素進入目標元素的范圍時觸發。可以在該事件的處理函數中執行一些顯示效果或狀態改變等操作。

ondragover 事件:該事件在拖動元素在目標元素上移動時持續觸發,即在拖動元素在目標元素上懸停期間。通常需要阻止默認的拖放行為,以便允許在目標元素上釋放。

ondrop 事件:該事件在拖動元素在目標元素上釋放時觸發。可以在該事件的處理函數中獲取拖動的數據并執行相應的操作。

這三個事件通常用于控制目標元素在接受拖動元素時的行為。

(2)文件拖拽上傳實現

元素拖拽的6個API,這里我們只需要使用dragover、drop這兩個,就能實現文件拖拽上傳。

下面簡單描述一下實現過程,具體細節大家看代碼就好,原理很簡單。

先獲取頁面中的 DropFrame 元素,再為其添加兩個事件監聽器。

dragover 事件監聽器:當有元素拖拽到 DropFrame 區域時觸發,用于指定拖放操作的效果。這里必須阻止事件默認行為,否則文件是拖不上去的,會被瀏覽器所阻止。

drop 事件監聽器:當在 DropFrame 區域釋放拖拽的元素時觸發,用于處理拖放完成后的操作。內部通過遍歷e.dataTransfer.items ,判斷文件或文件夾,文件就直接獲取File對象,文件夾則遞歸獲取內部文件的File對象,最后依次單獨上傳服務器。

完整實現代碼如下,復制即可使用。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style>
#DropFrame {
width: 360px;
height: 120px;
background-color: #b8deff;
border: solid 1px #3470ff;
}
</style>
</head>

<body>
<!-- 拖拽區域 -->
<div id="DropFrame">文件拖到這里上傳</div>
</body>

<script>
let dropFrame = document.getElementById('DropFrame');

// 拖動元素在目標元素上懸停期間
dropFrame.addEventListener('dragover', (e) => {
// 阻止默認事件和冒泡 必須寫
e.stopPropagation();
e.preventDefault();
});

// 拖動元素在目標元素上釋放時觸發
dropFrame.addEventListener('drop', (e) => {
// 阻止默認事件和冒泡 必須寫
e.stopPropagation();
e.preventDefault();

// 文件上傳處理邏輯
let items = e.dataTransfer.items;

for (const item of items) {
// 提取Entry對象
const entry = item.webkitGetAsEntry();

if (entry.isFile) {
// 處理文件,拿到File文件
entry.file((file) => {
console.log(file, 'file');

// 上傳文件到服務器
// var formData = new FormData();
// formData.append('file', file);
// axios.post('/upload', formData, {})
})

} else {
// 處理文件夾,拿到FileEntry對象
const reader = entry.createReader()
reader.readEntries((entries) => {
reHandleFile(entries)
})
}
}

});

// 如果文件夾是多級,則遞歸讀取
const reHandleFile = (entries) => {
for (const entry of entries) {
if (entry.isFile) {
// 處理文件,拿到File文件
entry.file((file) => {
console.log(file, 'file');
// 上傳文件到服務器
// var formData = new FormData();
// formData.append('file', file);
// axios.post('/upload', formData, {})
})
} else {
// 處理文件夾,拿到FileEntry對象
const reader = entry.createReader()
reader.readEntries((entries) => {
// 遞歸
reHandleFile(entries)
})
}
}
}
</script>
</html>

小結

本文簡單介紹了,元素拖拽的6個API,以及文件拖拽上傳的實現過程。

元素拖拽的6個API,這里我們只需要使用dragover、drop這兩個,就能實現文件拖拽上傳。

值得注意的是,必須阻止事件默認行為,否則文件是拖不上去的,會被瀏覽器所阻止。

責任編輯:姜華 來源: 今日頭條
相關推薦

2024-01-23 09:15:33

Vue3組件拖拽組件內容編輯

2009-12-29 18:09:00

Silverlight

2010-08-10 16:30:05

Flex上傳文件

2017-03-13 10:11:28

AndroidRecyclerVie功能介紹

2012-06-13 10:49:23

PHP

2021-08-27 08:38:10

CSS 技巧 resize

2009-07-08 09:29:58

WebWork

2024-05-20 13:06:18

2020-04-02 20:07:17

前端vuenote.js

2021-06-01 05:15:36

JavaScript 前端大文件并發上傳

2009-07-06 17:11:38

Servlet文件上傳

2009-07-14 17:20:31

Webwork文件上傳

2013-03-22 14:42:01

OSS開放存儲服務云計算

2011-09-01 18:38:02

SQL Server 文件流功能

2009-05-18 10:23:43

文件上傳PHPFILE函數

2024-02-27 08:27:18

元素拖拽Vue3拼圖驗證

2009-07-06 16:18:51

Servlet下載文件

2009-11-16 10:40:02

PHP上傳文件代碼

2011-09-14 09:20:03

PhonegapAndroid平臺

2022-06-13 14:06:33

大文件上傳前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久中文字幕一区 | 天天拍天天草 | 国产精品久久久久久久岛一牛影视 | 日产久久 | 欧美一极视频 | 国产一区二区精品在线观看 | 亚洲国产成人av好男人在线观看 | avhd101在线成人播放 | 久久久久久成人 | 国产一区二区欧美 | 天堂色 | 精品久久久久国产 | 狠狠色综合网站久久久久久久 | 亚洲精品久 | 国产精品视频偷伦精品视频 | 全免一级毛片 | 欧美亚洲国产日韩 | 日本三级在线网站 | 91影片| 伊人久久免费视频 | 欧美亚洲国产日韩 | 成人欧美 | 欧美色综合网 | 午夜看电影在线观看 | 在线毛片网 | 久久精品国内 | 成人在线视 | 一区二区三区在线播放 | 精品不卡 | 国产偷录视频叫床高潮对白 | 精品国产不卡一区二区三区 | 国产精品五区 | 99伊人 | 一区二区中文字幕 | 精品福利在线 | 精品国产乱码久久久久久久久 | 久久国产视频一区 | 亚洲高清在线视频 | 国产成人精品一区二区 | www.色.com| 99久久精品国产麻豆演员表 |