亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js實現純前端的圖片預覽

2019-11-20 10:11:58
字體:
來源:轉載
供稿:網友

圖片上傳是一個普通不過的功能,而圖片預覽就是就是上傳功能中必不可少的子功能了。在這之前,我曾經通過訂閱input[type=file]元素的onchange事件,一旦更改路徑則將圖片上傳至服務器,接著就獲取圖片路徑并賦值到img元素上。先不管文件異步提交的解決方案,就是服務端清理那些臨時的預覽圖片已經增加不少工作量了。

偶然從MDN上找到純前端圖片預覽的相關資料,經過整理后記錄下來以便日后查閱。

 一、準備功夫1──FileReader                        

  FileReader是HTML5的新特性,用于讀取Blob和File類型的數據。具體的用法如下:

(1). 構造方式

var fr = new FileReader();
(2). 屬性

readyState:類型為unsigned short,FileReader實例的當前狀態,(EMPTY――0,還沒有加載任何數據;LOADING――1,數據正在加載;DONE――2,已完成全部的讀取請求),只讀。

result:讀取到的文件內容,只讀。

error:類型為DOMError,表示在讀取文件時發生的錯誤,只讀。

(3). 方法

abort():中止讀取操作,并將readyState設置為DONE。當沒有執行讀取操作時,調用該方法會拋DOM_FILE_ABORT_ERR異常。

readAsArrayBuffer(Blob blob):讀取數據,result屬性被設置為ArrayBuffer類型

readAsText(Blob blob [, encoding='utf-8']):讀取數據,result屬性被設置為String類型

readAsBinaryString(Blob blob):讀取數據,result屬性被設置為原始二進制數據

readAsDataURL(Blob blob):讀取數據,result屬性被設置為Data URI Scheme形式(具體請瀏覽《JS魔法堂:Data URI Scheme介紹》)

(4).事件

onload:讀取數據成功后觸發

onerror:讀取數據時拋異常時觸發

onloadstart:讀取數據前觸發

onloadend:讀取數據后觸發,在onload或onerror后觸發

onabort:中止讀取后觸發

onprogress:讀取過程中周期性觸發

(5). 瀏覽器支持

FF3.6+,Chrome7+,IE10+ 

二、準備功夫2──DXImageTransform.Microsoft.AlphaImageLoader濾鏡    

(1). 作用:主要作用是對圖片進行透明處理(IE5.5~6并不支持透明的png)

(2). 樣式中的使用方式

#preview{ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="dummy.png");}

 (3). JS中的使用方式

var preview = document.getElementById('preview');preview.style.filter = preview.currentStyle.filter + ";progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src='dummy.png')";preview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src="dummy1.png";

(4). 屬性

enabled:可選項,設置濾鏡是否激活。值范圍true(默認),false

sizingMethod:可選項,設置濾鏡作用的圖片在容器邊界內的顯示方式,值范圍crop(剪切圖片以適應容器尺寸),image(默認值,增大或縮小容器尺寸以適應圖片的尺寸),scale(縮放圖片以適應容器尺寸)

src:必填項,使用絕對或相對URL指向背景圖片。當URL為用戶計算機本地地址時有效, 而img元素的src為用戶計算機本地地址時會拋不允許訪問本地文件系統的異常。

 三、實現                                

接下來我們就利用FileReader的readAsDataURL來獲取Data URI Scheme來實現圖片預覽的功能,而IE5.5~9我們就使用濾鏡DXImageTransform.Microsoft.AlphaImageLoader來作降級處理。

html片斷:

<style type="text/css">#preview{  width: 100px;  height: 100px;}</style><!--[if lte IE 9]><style type="text/css">  #preview{    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);  }</style><![endif]--><input type="file" onchange="showPreview(this);"/><div id="preview"></div>

js片斷:

var preview = function(el){  var pv = document.getElementById("preview");  // IE5.5~9使用濾鏡  if (pv.filters && typeof(pv.filters.item) === 'function'){    pv.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = el.value;  }  else{    // 其他瀏覽器和IE10+(不支持濾鏡)則使用FileReader    var fr = new FileReader();    fr.onload = function(evt){      var pvImg = new Image();      pvImg.style.width = pv.offsetWidth + 'px';      pvImg.style.height = pv.offsetHeight + 'px';      pvImg.src = evt.target.result;      pv.removeChild(0);      pv.appendChild(pvImg);    };    fr.readAsDataURL(el.files[0]);  }};

四、坑                                  

   由于IE11作了安全方面的考慮,使得在input[type=file]元素上通過value、outerHTML和getAttribute的方式都無法獲取用戶所選文件的真實地址,只能獲取到 C:/fakepath/文件名稱 。因此假如使用IE11,但文本模式卻設置為10以下,那就沒木有辦法實現圖片預覽了。

解決辦法1──在head標簽下加入這句: <meta http-equiv="X-UA-Compatible" content="IE=Edge"> 。這樣就可以告訴IE,默認使用當前IE的最高版本解析、渲染網頁了。

解決辦法2──采用 document.selection.createRangeColleciton() 獲取真實地址,具體操作如下:

// 假設fileEl就是[type=file]元素fileEl.select();var filePath = document.selection.createRangeCollection()[0].htmlText; 

五、補充:使用window.URL.createObjectURL代替FileReader       

  通過FileReader的readAsDataURL方法獲取的Data URI Scheme會生成一串很長的base64字符串,若圖片較大那么字符串則更長,若頁面出現reflow時則會導致性能下降。解決方案如下:

  1. 預覽的img標簽使用絕對定位,從而脫離正常文檔流,那么就與文檔的其他元素無關了,而reflow時則不會影響性能。

  2. 采用 window.URL.createObjectURL(Blob blob) 生成數據鏈接。

var createObjectURL = function(blob){ return window[window.webkitURL ? 'webkitURL' : 'URL']['createObjectURL'](blob);};

注意: window.URL.createObjectURL 生成的數據鏈接是獨占內存的,因此若不時用時需要調用 window.URL.revokeObjectURL(DOMString objUrl) 來釋放內存。在刷新頁面時,也會自動釋放內容。

var resolveObjectURL = function(blob){ window[window.webkitURL ? 'webkitURL' : 'URL']['revokeObjectURL'](blob);};

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂网在线观看| 久久成年人视频| 欧美日韩国产黄| 亚洲电影免费观看高清完整版| 欧美精品一二区| 在线观看精品自拍私拍| 国产人妖伪娘一区91| 国产在线观看精品一区二区三区| 国产精品一区二区久久| 欧美另类精品xxxx孕妇| 亚洲女人被黑人巨大进入al| 国产精品美女视频网站| 久久99国产精品自在自在app| 亚洲精品电影在线观看| 亚洲欧美一区二区三区四区| 日韩精品视频免费专区在线播放| 日韩欧美国产一区二区| 国产精品视频xxx| 精品毛片三在线观看| 一本色道久久88综合亚洲精品ⅰ| 国产精品美女在线观看| 日韩av第一页| 97在线视频免费播放| 国产精品免费福利| 精品视频在线播放色网色视频| 久久99国产精品自在自在app| 亚洲第一av在线| 亚洲加勒比久久88色综合| 8x海外华人永久免费日韩内陆视频| 国内精品一区二区三区| 欧美日韩美女在线观看| 亚洲护士老师的毛茸茸最新章节| 日本精品性网站在线观看| 国产精品久久久| 4p变态网欧美系列| 亚洲精品久久在线| 日韩av不卡在线| www.亚洲人.com| 91精品久久久久久久久久久久久久| 久久成人综合视频| 在线观看日韩视频| 国产精品成人一区| 欧美日韩加勒比精品一区| 国产精品久久久久久av下载红粉| 亚洲精品电影久久久| 久久夜色精品国产| 欧美成人精品一区二区| 国产精品视频永久免费播放| 亚洲小视频在线| 欧美日韩在线免费观看| 国产精品美女主播在线观看纯欲| 亚洲视频一区二区| 精品视频一区在线视频| 国产日韩一区在线| 欧美猛男性生活免费| 中文字幕亚洲一区二区三区| 亚洲精品久久久久久下一站| 日韩美女在线播放| 精品久久香蕉国产线看观看gif| 亚洲综合最新在线| 色偷偷888欧美精品久久久| 国产精品久久久久久婷婷天堂| 亚洲一区二区免费在线| 国产91精品久久久久| 欧美天天综合色影久久精品| 久久久亚洲网站| 亚洲影院高清在线| 欧美日韩在线观看视频| 国产精品一区av| 精品日本高清在线播放| 国产精品ⅴa在线观看h| 亚洲午夜未满十八勿入免费观看全集| 亚洲精品一区二区三区不| 精品成人国产在线观看男人呻吟| 欧美激情xxxx性bbbb| 国产精品久久久久久av福利软件| 亚洲人成在线观看| 色在人av网站天堂精品| 国产精品视频网| 高清一区二区三区四区五区| 久久久之久亚州精品露出| 91亚洲一区精品| 在线观看日韩www视频免费| 国产成人综合亚洲| 国产一区欧美二区三区| 欧美激情乱人伦一区| 国产精品日韩在线一区| 久久精品国产99国产精品澳门| 8090成年在线看片午夜| 中文字幕日韩欧美精品在线观看| 亚洲乱码国产乱码精品精天堂| 亚洲欧美日韩一区二区三区在线| 亚洲日本中文字幕| 久久影院在线观看| 欧美巨猛xxxx猛交黑人97人| 色av吧综合网| 亚洲综合中文字幕在线观看| 欧美国产精品日韩| 亚洲jizzjizz日本少妇| 亚洲老板91色精品久久| 亚洲激情中文字幕| 茄子视频成人在线| 国产精品美女av| 亚洲日韩欧美视频一区| 九色成人免费视频| 亚洲精品欧美一区二区三区| 亚洲福利影片在线| 久久久国产视频91| 久久在线视频在线| 91av中文字幕| 国产成+人+综合+亚洲欧美丁香花| 欧美日韩国产精品一区二区三区四区| 久久综合久久八八| 中文字幕精品国产| 国产精品久久久久久久app| 国产午夜精品视频| 中文字幕精品网| 国产日本欧美一区二区三区| 欧洲s码亚洲m码精品一区| 精品免费在线观看| 国语自产偷拍精品视频偷| 在线电影欧美日韩一区二区私密| 国产精品丝袜久久久久久不卡| 成人国产精品一区| 亚洲精品福利视频| 国产有码一区二区| 国语自产偷拍精品视频偷| 亚洲国产精品999| 色琪琪综合男人的天堂aⅴ视频| 最近2019中文字幕大全第二页| 国产精品视频久久久| 97碰在线观看| 色婷婷综合久久久久中文字幕1| 国产成人精品免费视频| 国产精品草莓在线免费观看| 亚洲国产成人久久综合| 日韩欧美在线第一页| 久久精品视频免费播放| 国产婷婷97碰碰久久人人蜜臀| 日韩69视频在线观看| 欧美激情在线播放| 国产精品一区二区三区免费视频| 亚洲综合在线做性| 国产日韩欧美影视| 在线视频日本亚洲性| 久久久久久久久久久av| 亚洲а∨天堂久久精品9966| 亚洲人成网站在线播| 国产精品狼人色视频一区| 在线日韩中文字幕| 亚洲男人天堂2023| 欧洲成人午夜免费大片| 国产乱肥老妇国产一区二| 欧美激情2020午夜免费观看| 欧美日韩成人免费| 久久精品国产视频| 国产精品色视频| 日韩av免费看| 久久久久久久91| 日韩电影中文字幕av| 有码中文亚洲精品| 亚洲精品乱码久久久久久按摩观| 日韩在线播放视频| 国产日产久久高清欧美一区|