HTML5拖拽上傳圖片預覽
阿新 • • 發佈:2018-12-23
$(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('請上傳圖片檔案!');
}
}
}
});