這篇文章帶給大家的內容是關於JavaScript拖曳上傳功能的實現及原理介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
最近,小明遇到這樣一種情況:在網頁中上傳文件時偶爾頁面會崩潰。小明仔細測試了這種情況,發現之前用的一個文件上傳組件有一點缺陷,於是,小明決定自己手寫一個,樣式如下:
圖一是沒有上傳檔案時的樣式,圖二為上傳檔案後的樣式。虛線部分為放置區域,先來看程式碼:
html部分
<div> <div> <div> <div>{{ fileName }}</div> <div> <span>将文件拖拽至此,或</span> <label>点此上传</label> </div> </div> </div> <div> <input> <label>选择文件</label> <button>提交</button> </div> </div>
css部分
* { font-size: 14px; } .drag-area { height: 200px; width: 300px; border: dashed 1px gray; margin-bottom: 10px; color: #777; } .uploader-tips { text-align: center; height: 200px; line-height: 200px; } .file-name { text-align: center; height: 200px; line-height: 200px; }
js部分
new Vue({ el: '#app', data () { return { fileName: '', batchFile: '', MAX_FILE_SIZE: 10 * 1000 * 1000 } }, methods: { // 点击上传 chooseUploadFile (e) { const file = e.target.files.item(0) if (!file) return if (file.size > this.MAX_FILE_SIZE) { return alert('文件大小不能超过10M') } this.batchFile = file this.fileName = file.name // 清空,防止上传后再上传没有反应 e.target.value = '' }, // 拖拽上传 fileDragover (e) { e.preventDefault() }, fileDrop (e) { e.preventDefault() const file = e.dataTransfer.files[0] // 获取到第一个上传的文件对象 if (!file) return if (file.size > this.MAX_FILE_SIZE) { return alert('文件大小不能超过10M') } this.batchFile = file this.fileName = file.name }, // 提交 uploadOk () { if (this.batchFile === '') { return alert('请选择要上传的文件') } let data = new FormData() data.append('upfile', this.batchFile) // ajax } } })
核心原理說明
#dragover和drop事件
對於拖曳這個動作而言,有二個核心概念,一個是
拖曳元素,另一個是
放置目標。這裡,我只講放置目標上的事件,對於拖曳元素的事件,請自行查閱。
當某個元素被拖曳到一個有效的放置目標上(如上例中虛線區域)時,下列事件會依序發生:
(1) dragenter
(2) dragover
(3) dragleave 或drop
只要有元素被拖曳到放置目標上,就會觸發dragenter 事件(類似mouseover 事件)。緊接在後的是 dragover 事件,而且在被拖曳的元素還在放置目標的範圍內移動時,就會持續觸發該事件。如果元素被拖曳了放置目標,dragover 事件不再發生,但會觸發 dragleave 事件(類似 mouseout事件)。如果元素被放到了放置目標中,則會觸發 drop 事件而不是 dragleave 事件。
我們可以重寫 dragover 事件的預設行為,如上例程式碼中的e.preventDefault()。
細心的同學可能要問了,那drop事件中也有e.preventDefault(),去掉行不行呢?大家可以自行試下。
- dataTransfer 物件
- input的change事件
細思極恐!例如,使用者要上傳一個文檔,但是拖曳到虛線區域後發現文檔內容還需要修改下,他改完後再拖曳該文檔,再提交到伺服器,那麼他上傳到伺服器的文檔內容卻是未修改之前的!
所以,我們需要程式碼e.target.value = ''來進行重置處理,這樣,每次上傳檔案都會觸發change事件。
以上是JavaScript拖曳上傳功能的實作及原理介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境