偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Vue3問題:如何實(shí)現(xiàn)拼圖驗(yàn)證+郵箱登錄功能?前后端!

開發(fā) 前端
本文簡(jiǎn)單介紹了元素拖拽的6個(gè)API,以及文件拖拽上傳的實(shí)現(xiàn)過程。元素拖拽的6個(gè)API,這里我們只需要使用Dragover、Drop這兩個(gè),就能實(shí)現(xiàn)文件拖拽上傳。

1. 需求分析

文件上傳,可以說是我們?cè)陧?xiàng)目中最常用的功能之一。

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

在項(xiàng)目中,我們一般都會(huì)直接選擇使用UI庫(kù)提供的上傳組件,簡(jiǎn)單配置一下必要的屬性,就實(shí)現(xiàn)了文件上傳功能,至于組件底層實(shí)現(xiàn)的原理,是絲毫不知。

所以今天,針對(duì)文件和文件夾的拖拽上傳功能,我整理了一下具體的實(shí)現(xiàn),很簡(jiǎn)單一起瞧瞧。

2. 問題實(shí)現(xiàn)

先普及一下元素拖拽的幾個(gè)API知識(shí)點(diǎn),再放上文件拖拽上傳的實(shí)現(xiàn)代碼,并做簡(jiǎn)單的描述,最后做小結(jié)。

(1)拖拽的6個(gè)API

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

ondragstart 事件:該事件在拖動(dòng)操作開始時(shí)觸發(fā),即拖動(dòng)操作的起點(diǎn)。通常在該事件的處理函數(shù)中設(shè)置拖動(dòng)的數(shù)據(jù)和效果。

drag 事件:該事件在元素正在被拖動(dòng)時(shí)持續(xù)觸發(fā),即在拖動(dòng)過程中??梢栽谠撌录奶幚砗瘮?shù)中執(zhí)行一些實(shí)時(shí)的操作,例如更新元素的位置或顯示一些效果。

dragend 事件:該事件在拖動(dòng)操作結(jié)束時(shí)觸發(fā),即拖動(dòng)操作的終點(diǎn)。通常在該事件的處理函數(shù)中執(zhí)行一些清理操作或其他邏輯。

這三個(gè)事件通常用于控制拖動(dòng)元素起始、過程和結(jié)束階段的行為。

ondragenter 事件:該事件在拖動(dòng)元素進(jìn)入目標(biāo)元素的范圍時(shí)觸發(fā)??梢栽谠撌录奶幚砗瘮?shù)中執(zhí)行一些顯示效果或狀態(tài)改變等操作。

ondragover 事件:該事件在拖動(dòng)元素在目標(biāo)元素上移動(dòng)時(shí)持續(xù)觸發(fā),即在拖動(dòng)元素在目標(biāo)元素上懸停期間。通常需要阻止默認(rèn)的拖放行為,以便允許在目標(biāo)元素上釋放。

ondrop 事件:該事件在拖動(dòng)元素在目標(biāo)元素上釋放時(shí)觸發(fā)??梢栽谠撌录奶幚砗瘮?shù)中獲取拖動(dòng)的數(shù)據(jù)并執(zhí)行相應(yīng)的操作。

這三個(gè)事件通常用于控制目標(biāo)元素在接受拖動(dòng)元素時(shí)的行為。

(2)文件拖拽上傳實(shí)現(xiàn)

元素拖拽的6個(gè)API,這里我們只需要使用dragover、drop這兩個(gè),就能實(shí)現(xiàn)文件拖拽上傳。

下面簡(jiǎn)單描述一下實(shí)現(xiàn)過程,具體細(xì)節(jié)大家看代碼就好,原理很簡(jiǎn)單。

先獲取頁(yè)面中的 DropFrame 元素,再為其添加兩個(gè)事件監(jiān)聽器。

dragover 事件監(jiān)聽器:當(dāng)有元素拖拽到 DropFrame 區(qū)域時(shí)觸發(fā),用于指定拖放操作的效果。這里必須阻止事件默認(rèn)行為,否則文件是拖不上去的,會(huì)被瀏覽器所阻止。

drop 事件監(jiān)聽器:當(dāng)在 DropFrame 區(qū)域釋放拖拽的元素時(shí)觸發(fā),用于處理拖放完成后的操作。內(nèi)部通過遍歷e.dataTransfer.items ,判斷文件或文件夾,文件就直接獲取File對(duì)象,文件夾則遞歸獲取內(nèi)部文件的File對(duì)象,最后依次單獨(dú)上傳服務(wù)器。

完整實(shí)現(xiàn)代碼如下,復(fù)制即可使用。

<!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>
<!-- 拖拽區(qū)域 -->
<div id="DropFrame">文件拖到這里上傳</div>
</body>

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

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

// 拖動(dòng)元素在目標(biāo)元素上釋放時(shí)觸發(fā)
dropFrame.addEventListener('drop', (e) => {
// 阻止默認(rèn)事件和冒泡 必須寫
e.stopPropagation();
e.preventDefault();

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

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

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

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

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

});

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

(3)小結(jié)

本文簡(jiǎn)單介紹了,元素拖拽的6個(gè)API,以及文件拖拽上傳的實(shí)現(xiàn)過程。

元素拖拽的6個(gè)API,這里我們只需要使用dragover、drop這兩個(gè),就能實(shí)現(xiàn)文件拖拽上傳。

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

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2024-01-03 08:20:40

2024-01-23 09:15:33

Vue3組件拖拽組件內(nèi)容編輯

2023-11-20 08:29:33

Vue微信掃碼授權(quán)登錄

2021-12-02 05:50:35

Vue3 插件Vue應(yīng)用

2024-02-01 09:10:04

頁(yè)面引導(dǎo)工具Vue3

2024-01-08 08:50:19

Vue3級(jí)聯(lián)菜單數(shù)據(jù)懶加載

2023-12-18 09:58:46

微信掃碼支付Vue3

2022-04-07 08:06:32

viteVue3項(xiàng)目

2023-11-28 09:03:59

Vue.jsJavaScript

2024-04-18 08:53:15

Vue3數(shù)字動(dòng)畫

2022-09-06 10:26:38

前后端分離Vue跨域

2022-03-10 11:04:04

Vue3Canvas前端

2024-03-19 08:35:30

Vue3添加水印維護(hù)版權(quán)標(biāo)識(shí)

2021-12-01 08:11:44

Vue3 插件Vue應(yīng)用

2021-11-30 08:19:43

Vue3 插件Vue應(yīng)用

2024-11-06 10:16:22

2024-05-22 08:47:41

2022-07-20 11:13:05

前端JSONVue3

2023-06-19 07:31:52

壓縮包java.Http

2024-08-13 09:26:07

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)