擴充套件EasyUI在頁面中馬上顯示選中的本地圖片
在編寫前臺頁面的時候,有時須要將選中的圖片夾雜著其它資訊一起上傳到服務端,在選著本地圖片的時候,為了獲得更好的效果,須要將該圖片顯示在頁面上。
最初思路有兩個。詳細例如以下:
1、獲取選中檔案的二進位制資料再傳遞給畫板,畫出圖片來。
2、獲取選中檔案的傳遞給Img標籤。
經過測試,得到例如以下結果:
1、Img標籤的src無法指向本地路徑的檔案,這應該是基於安全考慮的結果吧。
2、通過File API 讀取的檔案二進位制資料無法直接傳遞給Cancav畫板畫出選中圖片,這也許也是基於安全考慮的結果。
3、經過不懈努力。最終發現了一個解決方法,那就是通過File API的FileReader物件的readAsDataURL將本地圖片建立出一個虛擬URL傳遞給Img標籤的src。
具體程式碼例如以下:
當前專案是基於EasyUi的。以下是頁面的對話方塊程式碼,請關注id=”announcePicture”的檔案控制元件,系統要求在該檔案控制元件選擇一個圖片檔案時,將其顯示在id=”img”的Img標籤中。
<div id="announceDlg" class="easyui-dialog" style="width:400px;height:550px;padding:10px 20px" closed="true" buttons="#announceDlg-buttons">
<div class="ftitle">公告資訊</div>
<form id="fm" method="post" enctype="multipart/form-data">
<div class="fitem">
<label>公告Id:</label>
<input id="announceId" name="announceId" class="easyui-textbox" type="text" value="">
</div>
<div class="fitem">
<label>標題:</label>
<input type="text" id="announceTitle" name="announceTitle" class="easyui-textbox" value="" data-options="required:true">
</div>
<div class="fitem">
<label>檔案:</label>
<input class="easyui-filebox" id="announcePicture" name="announcePicture" value="" style="">
</div>
<div class="fitem">
<label>內容:</label>
<input type="text" id="announceContent" name="announceContent" class="easyui-textbox" value="" data-options="iconCls:`icon-search`,multiline:true,required:true" style="height:120px">
</div>
<div class="fitem">
<label></label>
<img id="img" style="width:160px;height:160px" />
</div>
</form>
</div>
<div id="announceDlg-buttons">
<a href="javascript:void(0)" class="easyui-linkbutton c6" iconcls="icon-ok" onclick="save()" style="width:90px">Save</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconcls="icon-cancel" onclick="javascript:$(`#announceDlg`).dialog(`close`)" style="width:90px">Cancel</a>
</div>
以下是對EasyUI進行的擴充,新增了getFile方法。該方法能夠獲取當前FileBox物件選中的檔案的File物件。
$.extend($.fn.filebox.methods, {
getFile: function (myself) {
var temp = $(myself).next().children("[type=`file`]");
var file = document.getElementById(temp.attr("id"));
if (file.files.length > 0) {
// 若選中一個檔案,則返回該檔案的File物件
return file.files[0];
}
// 若未選中不論什麼檔案,則返回null
return null;
}
});
以下是設定FileBox物件的OnChange事件,當選擇一個圖片後。執行當中定義的事件處理函式:
$("#announcePicture").filebox({
onChange: function (event) {
// 獲取所選檔案的File物件
var file = $(this).filebox("getFile");
if (file != null) {
// 建立FileReader物件
var reader = new window.FileReader();
// 定義reader的onload事件
// 當讀完檔案資訊後觸發onload事件
reader.onload = function (e) {
// reader.result儲存著產生的虛擬URL
$("#img").attr("src", this.result);
}
// 讀取指定檔案並形成URL
reader.readAsDataURL(file);
}
}
});
細心的各位一定會發現,在FileBox物件的OnChange事件處理函式內呼叫getFile時並未傳遞不論什麼闡述。可是在getFile函式中卻有一個myself引數被運用了。要了解這點須要看一下EasyUI中處理FileBox的原始碼:
$.fn.filebox = function (_4ed, _4ee) {
if (typeof _4ed == "string") {
var _4ef = $.fn.filebox.methods[_4ed];
if (_4ef) {
return _4ef(this, _4ee);
} else {
return this.textbox(_4ed, _4ee);
}
}
_4ed = _4ed || {};
return this.each(function () {
var _4f0 = $.data(this, "filebox");
if (_4f0) {
$.extend(_4f0.options, _4ed);
} else {
$.data(this, "filebox", {
options: $.extend({}, $.fn.filebox.defaults, $.fn.filebox.parseOptions(this), _4ed)
});
}
_4ea(this);
});
};
看到 return _4ef(this, _4ee); 這句語句了嗎?EasyUI在呼叫指定方法時,預設第一個引數為當前物件,而實際傳入的引數,則作為第二個引數來使用。
原文釋出時間為:2018年01月01日
原文作者: 會哭的鱷魚
本文來源:開源中國 如需轉載請聯絡原作者
相關文章
- js將選擇的圖片顯示在img中JS
- easyui應用(四)--- easyui擴充套件UI套件
- Chrome擴充套件 郵件選單在指定網站顯示Chrome套件網站
- [BUG反饋]SocialComment擴充套件問題:在文章頁面不顯示評論外掛套件
- 用 autoplank 在多個顯示器上使用 Plank 擴充套件塢套件
- Django實現圖片上傳並前端頁面顯示Django前端
- [外掛擴充套件]圖片牆套件
- psd圖片不能在網頁上顯示網頁
- 當在laravel中開發擴充套件時,如何將本地擴充套件載入進其他laravel專案中進行測試?Laravel套件
- Swift在擴充套件中關聯物件Swift套件物件
- [外掛擴充套件]圖片批量上傳外掛2.0套件
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- 在windows的php中安裝grpc擴充套件WindowsPHPRPC套件
- Laravel 後臺擴充套件包 Laravel-admin 多圖上傳功能之擴充套件 -- 已上傳圖片之可拖拽排序Laravel套件排序
- win10擴充套件顯示器怎樣設定_win10設定擴充套件顯示器的步驟Win10套件
- 大神教你用 autoplank 在多個顯示器上使用 Plank 擴充套件塢套件
- shell中擴充套件命令套件
- 圖片處理擴充套件 Grafika 的簡單使用套件
- [外掛擴充套件]多圖上傳欄位擴充套件MultiImages0.4套件
- sql中的擴充套件學習SQL套件
- 在debian 12 中安裝virtualbox擴充套件包套件
- 建立本地擴充套件包套件
- 如何在終端中顯示圖片
- [外掛擴充套件]圖片輪播外掛套件
- EasyUI選擇日期只顯示年月UI
- [Laravel Admin] 檔案 / 圖片上傳功能之擴充套件 -- 上傳新圖且保留原圖Laravel套件
- [外掛擴充套件]移動端多圖片上傳外掛uploadimages套件
- 圖片處理擴充套件 Intervention/image 的簡單使用套件
- 【SpringBoot】分析 SpringBoot 中的擴充套件點Spring Boot套件
- [外掛擴充套件]幻燈片 | 滾動圖片 外掛套件
- Laravel Bss 專案中用到的第三方擴充套件二, 圖片裁切擴充套件包Laravel套件
- 使用瀏覽器擴充套件篡改網頁中的 JS 檔案瀏覽器套件網頁JS
- 底部導航在一級頁面顯示,二級頁面不顯示
- Laravel 後臺擴充套件包 Laravel-admin 檔案 / 圖片上傳功能之擴充 -- 實現上傳新圖且保留原圖Laravel套件
- SPI擴充套件點在業務中的使用及原理分析套件
- JSON 格式化 顯示到頁面中JSON
- [外掛擴充套件]廣告圖片漂浮外掛套件
- [外掛擴充套件]百度圖片採集套件