成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

HTML5上傳圖片文件(含拖拽、預(yù)覽、上傳、美化)

JackJiang / 1163人閱讀

摘要:本文講細(xì)分講述圖片上傳預(yù)覽等。對(duì)象的類(lèi)數(shù)組序列考慮多文件上傳或者從桌面拖動(dòng)目錄或文件??蓪⑽募指顬樽止?jié)范圍。

歡迎交換友鏈 Laker"s Blog--進(jìn)擊的程序媛
Github:https://github.com/younglaker
微博: 江小湖Laker

上篇文章講了如何上傳文件。本文講細(xì)分講述圖片上傳、預(yù)覽等。

關(guān)于接口

File API

File - 獨(dú)立文件;提供只讀信息,例如名稱(chēng)、文件大小、mimetype 和對(duì)文件句柄的引用。

FileList - File 對(duì)象的類(lèi)數(shù)組序列(考慮多文件上傳或者從桌面拖動(dòng)目錄或文件)。

Blob - 可將文件分割為字節(jié)范圍。

FileReader - 讀取File或Blob

URL scheme

檢測(cè)瀏覽器是否支持
// 檢測(cè)是否支持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, // 如果用到跨域,需要后臺(tái)開(kāi)啟CORS
  processData: false,  // 注意:不要 process data
  contentType: false,  // 注意:不設(shè)置 contentType
    data: form_data
}).success(function(msg) {
    console.log(msg);
}).fail(function(msg) {
    console.log(msg);
});
拖拽上傳

三個(gè)相關(guān)事件:

dragenter

dragover

drop

原生JavaScript:

Demo2

Drop files here
    // 必須阻止dragenter和dragover事件的默認(rèn)行為,這樣才能觸發(fā) drop 事件 function fileSelect(evt) { evt.stopPropagation(); evt.preventDefault(); var files = evt.dataTransfer.files; // 文件對(duì)象 var output = []; // 處理多文件 for (var i = 0, f; f = files[i]; i++) { output.push("
  • ", escape(f.name), " (", f.type || "n/a", ") - ", f.size, " bytes, last modified: ", f.lastModifiedDate.toLocaleDateString(), "
  • "); } // 顯示文件信息 document.getElementById("list").innerHTML = output.join(""); } function dragOver(evt) { evt.stopPropagation(); evt.preventDefault(); evt.dataTransfer.dropEffect = "copy"; } // 監(jiān)聽(tīng)器 var dropZone = document.getElementById("drop_zone"); dropZone.addEventListener("dragover", dragOver, false); dropZone.addEventListener("drop", fileSelect, false);

    jQuery:

    其他代碼可以不變,注意監(jiān)聽(tīng)事件的時(shí)候的,由于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)的的文件輸入框元素,使用自定義的界面來(lái)充當(dāng)打開(kāi)文件選擇對(duì)話(huà)框的按鈕。要使用樣式display:none把原本的文件輸入框隱藏掉,然后在需要的時(shí)候調(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,把樣式寫(xiě)到label上,點(diǎn)擊label就是對(duì)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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79190.html

    相關(guān)文章

    • 基于Node的React圖片上傳組件實(shí)現(xiàn)

      摘要:常用的設(shè)置如下下的請(qǐng)求風(fēng)格下的請(qǐng)求和不太一樣,在正式的請(qǐng)求發(fā)出之前都會(huì)先發(fā)一個(gè)類(lèi)型為的請(qǐng)求作為試探,只有當(dāng)該請(qǐng)求通過(guò)以后,正式的請(qǐng)求才能發(fā)向服務(wù)端。所以服務(wù)端路由我們還需要處理這樣一個(gè)請(qǐng)求注意該請(qǐng)求同樣需要設(shè)置跨域。 寫(xiě)在前面 紅旗不倒,誓把JavaScript進(jìn)行到底!今天介紹我的開(kāi)源項(xiàng)目 Royal 里的圖片上傳組件的前后端實(shí)現(xiàn)原理(React + Node),花了一些時(shí)間,希望對(duì)...

      cfanr 評(píng)論0 收藏0
    • 從0開(kāi)始做一個(gè)的Vue圖片/ 文件選擇(上傳)組件[基礎(chǔ)向]

      摘要:當(dāng)拖動(dòng)的元素或文本選擇離開(kāi)有效的放置目標(biāo)時(shí),會(huì)觸發(fā)此事件。以及對(duì)象在拖放交互期間傳輸?shù)臄?shù)據(jù)。 showImg(https://segmentfault.com/img/bVJQgt?w=1318&h=966); 17-3-2更新: 謝謝@mengdu 補(bǔ)充的關(guān)于圖片預(yù)覽的另一種更簡(jiǎn)單方法 URL.createObjectURL(),具體在文章里補(bǔ)充 之前用Vue做了一個(gè)基礎(chǔ)的組件vue...

      Paul_King 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    閱讀需要支付1元查看
    <