玩轉HTML5應用實戰:靈活拖拉檔案
在HTML5中,出現了眾多的新的技術和特性,而本文將介紹的是目前HTML5標準中,對如何將使用者客戶端的檔案拖拉到瀏覽器這一特性進行初步的講解。在HTML5中的標準中,提到了希望能在新一代瀏覽器中,支援使用者直接將客戶端桌面的檔案拖放到瀏覽器中,甚至鼓勵做更多的工作(比如上傳檔案)。這篇文章將分如下幾個方面進行初步的分析和探討:
如何將檔案拖放到web頁面中
在Javascript中分析拖拽檔案
在客戶端裝載和解析檔案
使用 XMLHttpRequest2非同步上傳檔案到服務端
上傳時顯示一個進度條
改進上傳檔案的表單,甚至支援IE 6,以讓在各瀏覽器中可以相容執行。
並介紹如何單單隻用Javascript實現,不用任何框架。
目前瀏覽器對檔案拖拉的支援
在我們開始講解前,我們先要說明下,由於HTML5的標準最終版本還沒完全釋出,各瀏覽器也不是完全都對所有功能進行支援,所以本文的程式有可能在今後的各瀏覽器中不能完全執行成功,但至少在本文發表時,會對以下瀏覽器在如下各方面進行支援。
1) 目前程式能在所有的Firefox和Chrome的瀏覽器中很好的執行。
2) Opera瀏覽器能解通過Javascript去解析檔案,但不支援檔案的拖拉到瀏覽器中及使用XMLHttpRequest2去上傳檔案。
3) IE和Safari不支援任何本文提到的API和新特性。
4) Apple不允許在iOS系統中使用HTML表單上傳檔案。
下面,就讓我們開始學習之旅吧。
HTML和CSS
我們先來看下上傳檔案的表單,程式碼如下:
<form id=”upload” action=”upload.php” method=”POST” enctype=”multipart/form-data”>
<fieldset>
<legend>HTML File Upload</legend>
<input type=”hidden” id=”MAX_FILE_SIZE” name=”MAX_FILE_SIZE” value=”300000″ />
<div>
<label for=”fileselect”>Files to upload:</label>
<input type=”file” id=”fileselect” name=”fileselect[]” multiple=”multiple” />
<div id=”filedrag”>or drop files here</div>
</div>
<div id=”submitbutton”>
<button type=”submit”>Upload Files</button>
</div>
</fieldset>
</form>
<div id=”messages”>
<p>Status Messages</p>
</div>
可以看到,在這個表單中,放置了一個檔案選擇框,唯一跟HTML4不同的時,這個框採
用的是HTML5中的一個新增的檔案上傳框屬性multiple,允許選擇多個不同的檔案。此外,
在id為 filedrag的div中,這個區域是用來將檔案拖拉放置的區域,下文中會用到。
接下來會看下CSS,程式碼如下:
#filedrag
{
display: none;
font-weight: bold;
text-align: center;
padding: 1em 0;
margin: 1em 0;
color: #555;
border: 2px dashed #555;
border-radius: 7px;
cursor: default;
}
#filedrag.hover
{
color: #f00;
border-color: #f00;
border-style: solid;
box-shadow: inset 0 3px 4px #888;
}
在這段CSS中,設定了當檔案拖放到頁面的指定區域時的樣式,這個樣式是當檔案被拖動
到指定區域時,才起到作用的,是通過Javascript擊發其起作用的,下文會提到。
HTML5中的檔案API
在HTML5中,對檔案的API有如下幾點的新的改進,其標準可以參考
(http://www.w3.org/TR/file-upload/)。
FileList: 表示已選擇的檔案,以陣列的形式表示。
File: 代表一個單獨的檔案
FileReader: FileReader是一個介面,它允許我們在客戶端讀取檔案的資料,並且可以在Javascript中去使用。
開始動手寫Javascript
下面,我們開始動手編寫Javascript,首先我們編寫一些工具javascript,比如:
// getElementById
function $id(id) {
return document.getElementById(id);
}
//
// 輸出資訊
function Output(msg) {
var m = $id(“messages”);
m.innerHTML = msg + m.innerHTML;
}
接者,我們編寫init方法,去判斷檔案API的可用性,程式碼如下:
// 判斷當前瀏覽器中檔案API是否可用
if (window.File && window.FileList && window.FileReader) {
Init();
}
//
// 初始化程式
function Init() {
var fileselect = $id(“fileselect”),
filedrag = $id(“filedrag”),
submitbutton = $id(“submitbutton”);
// 新增檔案選擇的事件監聽
fileselect.addEventListener(“change”, FileSelectHandler, false);
// 判斷xmlhttprequest 2是否可用
var xhr = new XMLHttpRequest();
if (xhr.upload) {
// file drop
filedrag.addEventListener(“dragover”, FileDragHover, false);
filedrag.addEventListener(“dragleave”, FileDragHover, false);
filedrag.addEventListener(“drop”, FileSelectHandler, false);
filedrag.style.display = “block”;
// remove submit button
submitbutton.style.display = “none”;
}
}
相關文章
- 靈活應用Windows XP硬體配置檔案(轉)Windows
- .net core 靈活讀取配置檔案
- 應用DMAIC減少偏心套軸承轉動不靈活AI
- ASR專案實戰-任務佇列在檔案轉寫特性中的應用佇列
- 實戰|教你用Python玩轉MysqlPythonMySql
- ViewState靈活運用View
- 乾貨 | 玩轉雲檔案儲存——利用CFS實現web應用的共享訪問Web
- JavaScript玩轉機器學習-Tensorflow.js專案實戰JavaScript機器學習JS
- VC中實現多格式影像的靈活轉換 (轉)
- Java設計模式——觀察者模式的靈活應用Java設計模式
- 區域性範圍掃描的靈活應用
- 靈活運用JS開發技巧(66個實用技巧)JS
- 聯想企業網盤:靈活智慧 海量檔案掌控自如
- 強大靈活的檔案上傳庫:FilePond 詳解
- go語言實戰教程:Redis實戰專案應用GoRedis
- 正規表示式如何在PHP裡靈活的應用PHP
- 深入理解maven與應用(二):靈活的構建Maven
- 基於HTML5的移動Web應用——檔案操作HTMLWeb
- Excel非常快的匯入文字檔案靈活技術Excel
- Android應用保活實踐Android
- 實用!8個 chrome外掛玩轉GitHub,單個檔案下載小意思ChromeGithub
- 靈活運用JavaScript開發技巧JavaScript
- 玩轉spring boot——MVC應用Spring BootMVC
- LLM大模型部署實戰指南:Ollama簡化流程,OpenLLM靈活部署,LocalAI本地最佳化,Dify賦能應用開發大模型AI
- 開源協助平臺工程靈活應對多雲時代的挑戰
- SpEL應用實戰
- 【開源】Tsar——靈活的系統和應用採集軟體
- 靈活使用Kendo UI 核心元件開發web應用資訊提示功能UI元件Web
- 實戰專案 9: 習慣記錄應用
- 實戰專案 10: 貨物清單應用
- Linux檔案系統的桌面應用(轉)Linux
- 實驗7 檔案應用程式設計程式設計
- C++檔案操作實戰:建立、寫入、讀取、修改檔案一應俱全C++
- 用Python實現檔案亂序(轉)Python
- Android 用Retrofit 2實現多檔案上傳實戰Android
- 在Dreamweaver中靈活使用網頁表格(轉)網頁
- 靈活的JavaScriptJavaScript
- Win XP檔案屬性玩花樣(轉)