前端手寫文件上傳;使用input實現文件拖動上傳

使用input實現文件拖動上傳

在這里插入圖片描述

vue2代碼:

<template><div><div class="drop-area" @dragenter="highlight" @dragover="highlight" @dragleave="unhighlight" @drop="handleDrop"@click="handleClick">將文件拖拽到此處或者點擊上傳<input type="file" ref="fileInput"  accept=".png,.jpg,.jpeg,.pdf" @change="handleFiles" multiple style="display: none;"></div><ul v-if="fileList.length"><li v-for="(file, index) in fileList" :key="index">{{ file.name }}</li></ul><pre>{{ fileList }}</pre></div>
</template><script>
export default {data() {return {fileList: []};},methods: {highlight(e) {e.preventDefault();e.stopPropagation();e.target.classList.add('hover');},unhighlight(e) {e.target.classList.remove('hover');},handleDrop(e) {e.preventDefault();e.stopPropagation();this.unhighlight(e);const files = e.dataTransfer.files;console.log('拖拽得到List', e);// this.handleFiles(files);for (let i = 0; i < files.length; i++) {this.fileList.push({...files[i],name: files[i].name,size: files[i].size,type: files[i].type});}this.uploadFile()},handleClick() {this.$refs.fileInput.click();},handleFiles(e) {console.log(11, e);const files = e.target.files || e;for (let i = 0; i < files.length; i++) {this.fileList.push({...files[i],name: files[i].name,size: files[i].size,type: files[i].type});}this.uploadFile()},// 上傳文件uploadFile() {console.log('this.fileList', this.fileList);}}
};
</script><style>
.drop-area {width: 300px;height: 200px;border: 2px dashed #ccc;border-radius: 10px;text-align: center;line-height: 200px;cursor: pointer;
}.drop-area.hover {border-color: #11716f;
}.drop-area:hover {border-color: #11716f;
}
</style>

vue3代碼:

<template><div><div class="drop-area" @dragenter="highlight" @dragover="highlight" @dragleave="unhighlight" @drop="handleDrop"@click="handleClick">將文件拖拽到此處或者點擊上傳<input type="file" ref="fileInput" accept=".png,.jpg,.jpeg,.pdf" @change="handleFiles" multiple style="display: none;"></div><ul v-if="fileList.length"><li v-for="(file, index) in fileList" :key="index">{{ file.name }}</li></ul><pre>{{ fileList }}</pre></div>
</template><script>
import { ref } from 'vue';export default {setup() {const fileList = ref([]);const fileInput = ref(null);const highlight = (e) => {e.preventDefault();e.stopPropagation();e.target.classList.add('hover');};const unhighlight = (e) => {e.target.classList.remove('hover');};const handleDrop = (e) => {e.preventDefault();e.stopPropagation();unhighlight(e);const files = e.dataTransfer.files;for (let i = 0; i < files.length; i++) {fileList.value.push({...files[i],name: files[i].name,size: files[i].size,type: files[i].type});}uploadFile();};const handleClick = () => {console.log(fileInput.value);fileInput.value.click(); // 使用 ref 的 value 直接訪問 DOM 元素};const handleFiles = (e) => {const files = e.target.files || e;for (let i = 0; i < files.length; i++) {fileList.value.push({...files[i],name: files[i].name,size: files[i].size,type: files[i].type});}uploadFile();};// 上傳文件const uploadFile = () => {console.log('fileList', fileList.value);};return {fileList,highlight,unhighlight,handleDrop,handleClick,handleFiles,fileInput};}
};
</script><style>
.drop-area {width: 440px;height: 185px;border: 1px dashed #dcdfe6;border-radius: 6px;text-align: center;line-height: 185px;cursor: pointer;
}.drop-area.hover {border-color: #11716f;
}.drop-area:hover {border-color: #11716f;
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14236.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14236.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14236.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聽說京東618裁員沒?上午還在趕需求,下午就開會通知被裁了~

文末還有最新面經共享群&#xff0c;沒準能讓你刷到意向公司的面試真題呢。 京東也要向市場輸送人才了? 在群里看到不少群友轉發京東裁員相關的內容&#xff1a; 我特地去網上搜索了相關資料&#xff0c;看看網友的分享&#xff1a; 想不到馬上就618了&#xff0c;東哥竟然搶…

Python 機器學習 基礎 之 模型評估與改進 【模型評估與改進 / 交叉驗證】的簡單說明

Python 機器學習 基礎 之 模型評估與改進 【模型評估與改進 / 交叉驗證】的簡單說明 目錄 Python 機器學習 基礎 之 模型評估與改進 【模型評估與改進 / 交叉驗證】的簡單說明 一、簡單介紹 二、模型評估與改進 三、交叉驗證 1、scikit-learn 中的交叉驗證 2、交叉驗證的…

stm32工程綜合實驗_延時及中斷優先級

待下載綜合實驗 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/161fa4e200bb4022bf384e80a3af8797.jpg 很好的編程思想模式及資料(富萊xx電子)

【repo系列】repo常用命令的使用

前言 repo是一種代碼版本管理工具&#xff0c;它是由一系列的Python腳本組成&#xff0c;封裝了一系列的Git命令&#xff0c;用來統一管理多個Git倉庫。 本文章描述repo常用命令的使用。 常用命令 初始化 repo init 初始化代碼倉 repo init [options]常用options: -u URL…

JDBC——API詳解

一、DriverManager 1、用于注冊驅動程序&#xff1a;registerDriver(Driver driver)。 更常用的是Class.forName("com.mysql.jdbc.Driver")是由于Driver中包含了registerDriver(Driver driver)&#xff0c;值得注意的是&#xff0c;是mysql5之后的版本中&#xff0…

1.每日設計模式-理論

目錄 一、什么是設計模式 二、設計原則 三、設計模式的種類 代碼地址&#xff1a;patterns: 每日設計模式 一、什么是設計模式 軟件設計模式(Design Pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結&#xff0c;使用設計模式是為了可重用代碼…

AI大模型的口語練習APP

開發一個使用第三方大模型的口語練習APP涉及多個步驟&#xff0c;從需求分析到部署上線。以下是詳細的開發流程和關鍵步驟&#xff0c;通過系統化的流程和合適的技術選型&#xff0c;可以有效地開發出一個功能豐富、用戶體驗良好的口語練習APP。北京木奇移動技術有限公司&#…

網絡初識 二

一、TCP/IP五層協議 -> 應用層 : 傳輸的數據在應用程序中如何使用 -> 傳輸層 : 關注的是通信的起點終點 -> 網絡層 : 關注的是通信中的路線規劃 -> 數據鏈路層 : 關注的是相鄰節點之間的通信細節 -> 物理層 : 網絡通信的基礎設施 說是五層,實際上下面…

Qt案例練習(有源碼)

項目源碼和資源&#xff1a;Qt案例練習: qt各種小案例練習,有完整資源和完整代碼 1.案例1 項目需求&#xff1a;中間為文本框&#xff0c;當點擊上面的復選框和單選按鈕時&#xff0c;文本框內的文本會進行相應的變化。 代碼如下&#xff1a; #include "dialog.h" …

C++的數據結構(十):AVL樹

AVL樹是一種自平衡的二叉搜索樹&#xff0c;得名于其發明者G.M. Adelson-Velsky和E.M. Landis。在AVL樹中&#xff0c;任何節點的兩個子樹的高度最多相差1&#xff0c;這種性質確保了AVL樹的查找、插入和刪除操作的時間復雜度接近O(log n)。 AVL樹是一種二叉搜索樹&#xff0c;…

MongoDB基礎入門到深入(七)建模、調優

文章目錄 系列文章索引十一、MongoDB開發規范十二、MongoDB調優1、三大導致MongoDB性能不佳的原因2、影響MongoDB性能的因素3、MongoDB性能監控工具&#xff08;1&#xff09;mongostat&#xff08;2&#xff09;mongotop&#xff08;3&#xff09;Profiler模塊&#xff08;4&a…

K8S認證|CKA題庫+答案| 16. 升級集群

16、升級集群 CKA v1.29.0模擬系統免費下載試用&#xff1a; 百度網盤&#xff1a;https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwdwbki 題目&#xff1a; 您必須在以下Cluster/Node上完成此考題&#xff1a; Cluster Ma…

CTF網絡安全大賽簡單web題目:eval

題目來源于&#xff1a;bugku 題目難度&#xff1a;簡單 一道簡單web的題目 題目源代碼&#xff1a; <?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> 這個PHP腳本有幾個關鍵部分&#xff0c;但…

太陽誘電:順應時代需求的新型電容器為何能在全球得到廣泛應用(下)

隨著汽車電動化和電子控制化的進展&#xff0c;車載計算機和電氣部件也在逐漸向大功率化的方向發展。而構成這些車載設備電源電路的電子元器件也必須隨之進行技術革新。太陽誘電集團攜手全資子公司ELNA&#xff0c;開發并供應新型電容器“導電性高分子混合鋁電解電容器”&#…

【熱門話題】一文帶你讀懂公司是如何知道張三在脈脈上發了“一句話”的

按理說呢&#xff0c;A公司和脈脈屬于不同的平臺&#xff0c;而且脈脈上大家可以匿名發言&#xff0c;所以&#xff0c;即便我坐在你邊上&#xff0c;我發了一句話上去&#xff0c;你也不知道是誰發的。但通過一些技術&#xff0c;我們卻可以分析出&#xff0c;公司是如何知道張…

IOC控制反轉

IOC IOC&#xff0c;全稱為Inversion of Control(控制反轉)&#xff0c;是一種設計原則&#xff0c;它反轉了傳統編程中的控制流程。在傳統的編程模式中&#xff0c;組件之間的依賴關系是由組件自身在內部創建和維護的。而在控制反轉模式中&#xff0c;這種依賴關系由外部容器(…

SSH 免密登錄vscode 附debug 免密登錄失敗問題排查

SSH 免密登錄vscode 附debug 關鍵詞 &#xff1a;vscode ssh ssh無法免密登錄 ssh免密登錄失敗 1 sshd 的配置文件/etc/ssh/sshd_config&#xff0c; 確保公鑰登錄開啟 PubkeyAuthentication yes2 生成公鑰并上傳 ssh-keygen找到本地 .ssh/id_rsa.pub 將其中文本內容搞到…

PS —— 制作證件照

PS —— 制作證件照 裁剪工具魔棒工具油漆桶工具擴展畫布 老是看編程&#xff0c;會有些疲勞&#xff0c;這個專欄我會放一些其他的知識&#xff0c;我們今天利用PS制作證件照&#xff08;注意&#xff0c;這里一些ps的基礎操作我不會很展開的去講&#xff09;&#xff1a; 裁…

Redisson分布式Redis鎖,tryLock方法詳解

在 Java 中&#xff0c;RLock 是 Redisson 庫中提供的一個分布式鎖接口&#xff0c;用于實現基于 Redis 的分布式鎖。RLock 的 tryLock 方法用于嘗試獲取鎖&#xff0c;并在特定的時間內等待獲取鎖。 方法簽名如下&#xff1a; boolean tryLock(long waitTime, long leaseTim…

WPF關鍵組件代碼示例

通過一個綜合示例代碼&#xff0c;展示WPF的關鍵組件&#xff0c;包括XAML、控件、數據綁定、樣式和模板以及動畫。這個示例創建一個簡單的WPF應用程序&#xff0c;包含一個文本框、按鈕和列表框&#xff0c;實現數據綁定、自定義樣式和模板&#xff0c;以及按鈕點擊后的動畫效…