input file上传图片预览
下載地址http://download.csdn.net/detail/cometwo/9383602
兄弟文章:http://blog.csdn.net/libin_1/article/details/50916704
input file上傳圖片預覽其實很簡單,只是沒做過的感覺很神奇,今天我就扒下她神秘的面紗,其實原理真的非常非常非常非常非常非常簡單!
點擊紅框是加載顯示圖片,X號刪除,藍框是自動在后面添加添加圖片框,所有的都是原創,代碼其實可以更加精簡,看終結版文件
<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title><script type="text/javascript" src="jquery-1.11.1.min.js"></script><style type="text/css">.imgbox,.imgbox1{float: left;margin-right: 20px;margin-top: 20px;position: relative;width: 182px;height: 142px;border: 1px solid red;overflow: hidden;}.imgbox1{border: 1px solid blue;}.imgnum{left: 0px;top: 0px;margin: 0px;padding: 0px;}.imgnum input,.imgnum1 input {position: absolute;width: 182px;height: 142px;opacity: 0;}.imgnum img,.imgnum1 img {width: 100%;height: 100%;}.close,.close1 {color: red;position: absolute;left: 170px;top: 0px;display: none;}</style> </head><body> <div id="img"> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div><div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div> <div class="imgbox"><div class="imgnum"><input type="file" class="filepath" /><span class="close">X</span><img src="btn.png" class="img1" /><img src="" class="img2" /></div> </div><div class="imgbox1"><div class="imgnum"><input type="file" class="filepath1" /><span class="close1">X</span><img src="btn.png" class="img11" /><img src="" class="img22" /></div> </div></div></body> <script type="text/javascript">$(function() {$(".filepath").on("change",function() {alert($('.imgbox').length);var srcs = getObjectURL(this.files[0]); //獲取路徑$(this).nextAll(".img1").hide(); //this指的是input$(this).nextAll(".img2").show(); //fireBUg查看第二次換圖片不起做用$(this).nextAll('.close').show(); //this指的是input$(this).nextAll(".img2").attr("src",srcs); //this指的是input$(this).val(''); //必須制空$(".close").on("click",function() {$(this).hide(); //this指的是span$(this).nextAll(".img2").hide();$(this).nextAll(".img1").show();})})})function getObjectURL(file) {var url = null;if (window.createObjectURL != undefined) {url = window.createObjectURL(file)} else if (window.URL != undefined) {url = window.URL.createObjectURL(file)} else if (window.webkitURL != undefined) {url = window.webkitURL.createObjectURL(file)}return url};$(function() {$("#img").on("change",".filepath1",function() {//alert($('.imgbox1').length);var srcs = getObjectURL(this.files[0]); //獲取路徑alert(srcs);//this指的是input/* $(this).nextAll(".img22").attr("src",srcs); //this指的是input$(this).nextAll(".img22").show(); //fireBUg查看第二次換圖片不起做用*/var htmlImg='<div class="imgbox1">'+'<div class="imgnum1">'+'<input type="file" class="filepath1" />'+'<span class="close1">X</span>'+'<img src="btn.png" class="img11" />'+'<img src="'+srcs+'" class="img22" />'+'</div>'+'</div>';$(this).parent().parent().before(htmlImg);$(this).val(''); //必須制空$(this).parent().parent().prev().find(".img11").hide(); //this指的是input$(this).parent().parent().prev().find('.close1').show();$(".close1").on("click",function() {$(this).hide(); //this指的是span$(this).nextAll(".img22").hide();$(this).nextAll(".img11").show();if($('.imgbox1').length>1){$(this).parent().parent().remove();}})})})</script></html>問題
加入我們在 HTML 里面有一個圖片上傳控件:
注意這個 accept=”image/*” 非常重要,它指定了上傳的是圖片,在移動端的時候會關聯到系統的彈窗選擇類型等問題,務必加上。
然后,問題是,我們在沒有提交這個表單到服務器之前,有沒有辦法把圖片的內容讀取出來呢?
看似簡單,都是客戶端的文件,應該是可以的,但在之前確實沒什么好辦法,但是自從我們有了 HTML5
例子說明問題
復制代碼
復制代碼
簡要說明
簡單來說整個操作設計如下幾步:
通過 的 change 事件觸發事件,并且獲取 event 對象;
通過 event 對象獲取上傳的文件的 js 對象 file ;
通過 window.URL 工具從 file 對象生成一個可用的 URL;
把這個 URL 置入使用;
*釋放這個 URL 的伺服
關鍵點:
對于同一個 file ,每次調用 URL.createObjectURL 的時候,都會重新生成一個不同的 URL;
調用 URL.createObjectURL 的時候,瀏覽器自動在內存中開辟空間,用于伺服這個 URL,也就是使得這個 URL 可以請求成功;
如果調用了 URL.revokeObjectURL(imgURL); 之后,這個伺服就會關掉,再請求這個 URL 就會 404;
這一切都是客戶端的事情,服務器端對此一無所知,包括你選擇的這個圖;
這個 imgURL 大概是這個樣子:blob:http%3A//localhost%3A8000/22cc97d5-5e46-4d87-9df4-c3e8c0aa72bb
總結
以上是生活随笔為你收集整理的input file上传图片预览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android】17.1 Bound
- 下一篇: [CC]CC插件初探