1. 程式人生 > >HTML5拖拽上傳圖片預覽

HTML5拖拽上傳圖片預覽

$(function() { /*思路: *1.熟悉檔案拖拽 目標元素 的四個事件,注意:ondragover、ondrop事件中阻止預設行為 *2.拖拽放置後,獲取到檔案物件集合:e.dataTransfer.files *3.迴圈該集合中的每個檔案物件,判斷檔案型別以及檔案大小,是指定型別則進行相應的操作 *4.讀取檔案資訊物件:new FileReader(),它有讀取檔案物件為DataUrl等方法:readAsDataURL(檔案物件)、讀取成功之後觸發的事件:onload事件等,this.result為讀取到的資料 *5.在FileReader物件中的幾個事件中進行相應的邏輯處理 * */
//必須將jq物件轉換為js物件,呼叫原生方法 var oDiv = $(".container").get(0); var oP = $(".text"); //進入 oDiv.ondragenter = function() { oP.html(''); } //移動,需要阻止預設行為,否則直接在本頁面中顯示檔案 oDiv.ondragover = function
(e) {
e.preventDefault(); } //離開 oDiv.onleave = function() { oP.html('請將圖片檔案拖拽至此區域!'); } //拖拽放置,也需要阻止預設行為 oDiv.ondrop = function(e) { e.preventDefault(); //獲取拖拽過來的物件,檔案物件集合
var fs = e.dataTransfer.files; //若為表單域中的file標籤選中的檔案,則使用form[表單name].files[0]來獲取檔案物件集合 //列印長度 console.log(fs.length); //迴圈多檔案拖拽上傳 for (var i = 0; i < fs.length; i++) { //檔案型別 var _type = fs[i].type; console.log(_type); //判斷檔案型別 if (_type.indexOf('image') != -1) { //檔案大小控制 console.log(fs[i].size); //讀取檔案物件 var reader = new FileReader(); //讀為DataUrl,無返回值 reader.readAsDataURL(fs[i]); reader.onloadstart = function(e) { //開始載入 } // 這個事件在讀取進行中定時觸發 reader.onprogress = function(e) { $("#total").html(e.total); } //當讀取成功時觸發,this.result為讀取的檔案資料 reader.onload = function() { //檔案資料 // console.log(this.result); //新增檔案預覽 var oImg = $("<img style='width:100px;' src='' />"); oImg.attr("src", this.result); $(oDiv).append(oImg); //oDiv轉換為js物件呼叫方法 } //無論成功與否都會觸發 reader.onloadend = function() { if (reader.error) { console.log(reader.error); } else { //上傳沒有錯誤,ajax傳送檔案,上傳二進位制檔案 } } } else { alert('請上傳圖片檔案!'); } } } });