摘要:本文講細(xì)分講述圖片上傳預(yù)覽等。對象的類數(shù)組序列考慮多文件上傳或者從桌面拖動目錄或文件。可將文件分割為字節(jié)范圍。
歡迎交換友鏈 Laker"s Blog--進(jìn)擊的程序媛
Github:https://github.com/younglaker
微博: 江小湖Laker
上篇文章講了如何上傳文件。本文講細(xì)分講述圖片上傳、預(yù)覽等。
關(guān)于接口File API
File - 獨(dú)立文件;提供只讀信息,例如名稱、文件大小、mimetype 和對文件句柄的引用。
FileList - File 對象的類數(shù)組序列(考慮多文件上傳或者從桌面拖動目錄或文件)。
Blob - 可將文件分割為字節(jié)范圍。
FileReader - 讀取File或Blob
URL scheme
檢測瀏覽器是否支持// 檢測是否支持File API if (window.File && window.FileReader && window.FileList && window.Blob) { // 支持 } else { alert("不支持"); }基本代碼
選取一張圖片,并預(yù)覽:
Demo1
.preview_box img { width: 200px; } $("#img_input").on("change", function(e){ var file = e.target.files[0]; //獲取圖片資源 // 只選擇圖片文件 if (!file.type.match("image.*")) { return false; } var reader = new FileReader(); reader.readAsDataURL(file); // 讀取文件 // 渲染文件 reader.onload = function(arg) { var img = ""; $(".preview_box").empty().append(img); } });
上傳到服務(wù)器
var form_data = new FormData(); var file_data = $("#img_input").prop("files")[0]; // 把上傳的數(shù)據(jù)放入form_data form_data.append("user", "Mike"); form_data.append("img", file_data); $.ajax({ type: "POST", // 上傳文件要用POST url: "", dataType : "json", crossDomain: true, // 如果用到跨域,需要后臺開啟CORS processData: false, // 注意:不要 process data contentType: false, // 注意:不設(shè)置 contentType data: form_data }).success(function(msg) { console.log(msg); }).fail(function(msg) { console.log(msg); });拖拽上傳
三個相關(guān)事件:
dragenter
dragover
drop
原生JavaScript:
Demo2
Drop files here
jQuery:
其他代碼可以不變,注意監(jiān)聽事件的時候的,由于jQuery的封裝,數(shù)據(jù)存放的字段有變,傳參是e.originalEvent而不是e:
$("#drop_zone").on("dragover", function(e){ e.stopPropagation(); e.preventDefault(); handleDragOver(e.originalEvent); }); $("#drop_zone").on("drop", function(e){ e.stopPropagation(); e.preventDefault(); handleFileSelect(e.originalEvent); });美化上傳框 方法一: 在隱藏的文件輸入框上調(diào)用click()方法
隱藏掉默認(rèn)的的文件輸入框元素,使用自定義的界面來充當(dāng)打開文件選擇對話框的按鈕。要使用樣式display:none把原本的文件輸入框隱藏掉,然后在需要的時候調(diào)用它的click()方法就行了。
選擇文件 var fileSelect = document.getElementById("fileSelect"), fileElem = document.getElementById("fileElem"); fileSelect.addEventListener("click", function (e) { if (fileElem) { fileElem.click(); // jQuery可以使用 trigger() } e.preventDefault(); // prevent navigation to "#" }, false);方法二:用label
隱藏input,把樣式寫到label上,點(diǎn)擊label就是對input進(jìn)行操作。
Demo3
#img_input2 { display: none; } #img_label2 { background-color: #f2d547; border-radius: 5px; display: inline-block; padding: 10px; } #preview_box2 img { width: 200px; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79190.html
摘要:常用的設(shè)置如下下的請求風(fēng)格下的請求和不太一樣,在正式的請求發(fā)出之前都會先發(fā)一個類型為的請求作為試探,只有當(dāng)該請求通過以后,正式的請求才能發(fā)向服務(wù)端。所以服務(wù)端路由我們還需要處理這樣一個請求注意該請求同樣需要設(shè)置跨域。 寫在前面 紅旗不倒,誓把JavaScript進(jìn)行到底!今天介紹我的開源項(xiàng)目 Royal 里的圖片上傳組件的前后端實(shí)現(xiàn)原理(React + Node),花了一些時間,希望對...
摘要:當(dāng)拖動的元素或文本選擇離開有效的放置目標(biāo)時,會觸發(fā)此事件。以及對象在拖放交互期間傳輸?shù)臄?shù)據(jù)。 showImg(https://segmentfault.com/img/bVJQgt?w=1318&h=966); 17-3-2更新: 謝謝@mengdu 補(bǔ)充的關(guān)于圖片預(yù)覽的另一種更簡單方法 URL.createObjectURL(),具體在文章里補(bǔ)充 之前用Vue做了一個基礎(chǔ)的組件vue...
閱讀 2121·2021-11-23 10:06
閱讀 3484·2021-11-11 16:54
閱讀 3349·2019-08-29 17:31
閱讀 3573·2019-08-29 17:05
閱讀 2173·2019-08-26 13:36
閱讀 2165·2019-08-26 12:17
閱讀 531·2019-08-26 12:12
閱讀 1679·2019-08-26 10:19