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

首頁 > 擴展 > jQuery > 正文

jQuery.fakeFile插件:網站上傳控件

2024-09-06 20:04:34
字體:
來源:轉載
供稿:網友

使用css來美化表單元素時,一直沒有好的方法美化文件上傳控件。http://www.quirksmode.org/dom/inputfile.html(網站好像出錯)提供了美化文件上傳控件的方法。本人在該方法的啟發之下,結合自己的項目,將其功能更加完善,經過改善之后,其具有以下特點:

  1. 用戶所見并不是文件上傳按鈕,而是一個按鈕;
  2. 可以對圖片的格式進行限制;
  3. 用戶選擇的圖片可以顯示在特定區域之中(ie6、safari、opera除外);
  4. 在用戶禁用js的情況下文件上傳控件保持可用狀態。

本人將其進行封裝成一個jquery插件,因網上已經有一個叫jquery.fakefile的插件,為了與其區分開來,我將并將其命名為jquery.livefakefile。這篇文章將介紹該方法的原理和使用方法。

一、需求

需求很簡單,但實現起來需要一定得技巧,簡述如下:

  1. 要求不出現文件上傳控件,而是一個“上傳圖片”的按鈕,用戶單擊該按鈕時彈出圖片對話框;
  2. 選擇圖片后,圖片在按鈕上方顯示出來,默認情況下,顯示默認的圖片;
  3. 對選擇的圖片進行格式判斷,一旦不符合要求,在按鈕下方顯示錯誤信息,并顯示默認的圖片。

二、分析

實現點擊按鈕彈出選擇圖片對話框效果

文本上傳控件前面有一輸入框,受michael mcgrady(ljzcome曾翻譯過此文)的啟示,我們創建“上傳圖片”按鈕,然后改變文件上傳控件的opacity屬性,將其設置為0,并通過定位屬性使點擊區域位于按鈕之上。這樣,用戶的每一次點擊看似是點擊的按鈕,實則是文本上傳控件本身。

顯示用戶選擇的圖片

要顯示圖片看似很簡單,但哥哥瀏覽器之間存在差異,ie6并不能正確顯示圖片,ie7可以通過使用濾鏡alphaimageloder使其顯示。而firefox也不能正常顯示圖片,但它有一個方法可以使圖片顯示—getasdataurl()。其他瀏覽器opera、safari也不能正常顯示圖片。所以我們使用瀏覽器嗅探技術對不同的瀏覽器分別處理,對不能正常顯示圖片的瀏覽器讓其顯示文字即可。

判斷圖片格式

只需在觸發文件上傳控件的change事件時通過正則表達式驗證即可,一旦符合格式要求即將圖片或提示文字顯示出來,否則顯示錯誤提示信息。

可用性分析

因為是通過js來改變文件上傳控件的外觀,那么就必須保證用戶在禁用js的情況下能正常上傳圖片。所以在html結構中我們放置的應該是正常的文件上傳控件。

|||

三、html和css代碼

html代碼

html結構很簡單,我們為將其放置到一個class屬性為“filewrap”的div即可,盡管通過js生成了一些html代碼,但是,到目前為止,我們只需要簡單的這樣做就行,即:

< class=”filewrap”>
< type=”file” name=”photo” />
</div>

css代碼

設置.filewrap的屬性,他只是一個容器,主要用來容納“上傳圖片”按鈕<button type=”button”>上傳圖片<button>,錯誤提示消息<p class=”mes”></p>以及圖片顯示的區域<div class=”imgwrap”><img src=”” /></div>。最后生成的完整代碼如下:

<div class="filewrap">;
  <div class="imgwrap">;
   <img src="/lib/img/defimage.gif"/>;
  </div>;
  <div class="fakefile">;
   <button type="button">;瀏覽圖片</button>;
   <p class="mes"/>;
   <input type="file" class="file fakecn" name="photo" id="file_0"/>;
  </div>;
</div>

我們對照生成的代碼,定義相關的css屬性;

定義filewrap需要注意的,需要給其添加overflow:hidden屬性,以確保文本上傳控件不會超出點擊區域,因為文本上傳控件是借助定位使其覆蓋在“點擊按鈕”之上的,另外給其定義一個合適的寬度,filewrap的css屬性如下:

div.filewrap{
 overflow:hidden;
 width:110px;
}

放置圖片的容器imgwrap,為確保圖片能居中顯示,只需定義text-align:center;即可。

div.imgwrap{
 text-align:center;
}

我們將文件上傳控件放到class屬性為fakefile的div中,這樣是為了方便定位,設置其定位屬性為position:relative。需要注意的是,我們要定義padding-top屬性,這是因為錯誤信息位于按鈕的下方,而該按鈕是被絕對定位的,如果不定義padding-top屬性,錯誤信息將被按鈕覆蓋。padding-top的值略高于按鈕的高度,代碼如下:

div.fakefile{
  padding-top:25px;
  position:relative;
}

對于“上傳圖片”按鈕和錯誤信息,其css代碼如下:

div.fakefile button{
 left:10px;
 position:absolute;
 top:3px;/*確保按鈕與圖片之間不會靠的太近*/
 z-index:1;
}
div.fakefile .mes{
 padding:0 3px;
    text-align:left;
}

對于文本上傳控件,設置透明度為0,并定義left值,是其便宜,確保點擊區域位于“上傳圖片”的上方,代碼如下:

div.fakefile input{
 left:-135px;/*大約為輸入框的寬度*/
 opacity:0;
 filter:alpha(opacity:0);
 -moz-opacity:0;
 z-index:2;/*確??丶挥诎粹o上方*/
}

|||

四、jquery. livefakefile核心代碼:

關于如何創建jquery插件,這里不做介紹,你可以去官方網站查看相關資料,代碼如下:

(function($){
/*
 * @author denisdeng dexibe@gmail.com
 * blog www.denisdeng.com
 * $version: 2009.8.11 1.0
 * param reg[string] the format of image;
 * param defimg[string] the default image;
 * param btntext[string] the text of button;
 * param error[string] the error;
 * param imgtext[string] the text when image do not show normaly;
 */

$.fn.livefakefile = function(o){
 var settings = {
   reg:"png|jpe?g|gif|bmp",
   defimg:'img/defimage.gif',
   btntext:'瀏覽圖片',
   blankimg: "img/blank.gif",
   error: '對不起,照片格式不正確,請重新選擇',
   imgtext:'你已經選擇文件'
 };
 var ie7 = $.browser.msie&&($.browser.version == "7.0");
 var ie8 = $.browser.msie&&($.browser.version == "8.0");
 var moz = $.browser.mozilla;
 return this.each(function(i,v){
  if(o) settings = $.extend(settings, o);
  var wrap = $('<div class="fakefile"></div>');
  var mes = $('<p class="mes"></p>');
  var button = $('<button type="button"></button>');
  var parent = $(this).parent('.fileinputs');
  var imgwrap = $('<div class="imgwrap"></div>');
  var defimg = $('<img src="'+settings.defimg+'" />');
  imgwrap.append(defimg);
  button.append(settings.btntext);
  wrap.append(button);
  wrap.append(mes);
  imgwrap.insertbefore($(this)); 
  $(this).attr("id",'file_'+i).appendto(wrap);
  parent.append(wrap);
  $(this).bind('change',function(){
   var val = $(this).val();
   var imgname = val.slice(val.lastindexof("//")+1);
   if(val.match(new regexp(".(" + settings.reg + ")$", "i"))){
    mes.empty();
    //針對不能正常顯示圖片的瀏覽器
    var img = $('<span></span>') .append(settings. imgtext).append(imgname);
    //針對ie7或ie8瀏覽器
    if(ie7 || ie8){
     var img = $('<img src="'+ settings.blankimg+'" alt="" style="filter:progid:dximagetransform.microsoft.
alphaimageloader(sizingmethod=/'scale/',src=/''+val+'/');" />');
    }
    //針對火狐瀏覽器
    if(moz){
     var obj = document.getelementbyid('file_'+i);
     var img = $('<img src="'+obj.files[0].getasdataurl()+'" alt="" width="75" />');
    }
    imgwrap.empty().append(img);
   }else{
    imgwrap.empty().append(defimg);
    mes.html(settings.error);
   }
  });
 })
}
})(jquery)

注意,在上面的代碼中,我先定義的是圖片不能正常顯示的情況,然后對不同瀏覽器做不同處理。使用起來很簡單,在頁面的頭部引入jquery庫和jquery. livefakefile插件,假如頁面中有一個class為”.fake”的文本框,只需調用一下代碼即可:

<script type="text/javascript">;
$(function(){
$(".fake").livefakefile();
})
</script>;

參數reg、defimg、btntext、blankimg、error、imgtext主要用來方便自己定義。如你可以修改,然后調用:

<pre class="brush:javascript">
<script type="text/javascript">;
$(function(){
var obj = {
 reg: "bmp",
 defimg:'img/yourimg.gif',
 btntext:' browse ',
 blankimg: "img/blank.gif",
 error: sorry,the format of image is wrong, please select again!',
 imgtext:'you have select the image:'
}
$(".fake").livefakefile(obj);
})
</script>;

五、相關資源:

  • 參考文章:styling an input type=”file”
  • 原文地址:http://www.denisdeng.com/?p=348

注:所有轉載者需標明原文地址,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019年好看中文字幕视频| 国产美女精品视频免费观看| 国产自摸综合网| 国产精品电影久久久久电影网| 中文字幕综合一区| 国产精品h在线观看| 中文字幕成人在线| 国产亚洲一区二区在线| 日韩激情视频在线播放| 91精品国产99久久久久久| 成人av在线天堂| 欧美日韩激情视频| 成人写真视频福利网| 欧美极品少妇与黑人| 在线视频免费一区二区| 狠狠综合久久av一区二区小说| 久久综合久久八八| 国产精品久久久久91| 日韩精品在线免费观看视频| 18一19gay欧美视频网站| 久久琪琪电影院| 欧美性生交xxxxx久久久| 国产精品久久久久免费a∨| 国产剧情久久久久久| x99av成人免费| 91精品国产色综合久久不卡98| 精品在线欧美视频| 性欧美长视频免费观看不卡| 8090理伦午夜在线电影| 国产精品福利小视频| 欧美孕妇与黑人孕交| 亚洲一区二区三区sesese| 中文字幕国产精品| 国产精品91久久| 91精品国产综合久久香蕉最新版| 青青久久av北条麻妃黑人| 2019中文字幕在线| 成人免费淫片aa视频免费| 精品美女永久免费视频| 欧美高清电影在线看| 欧美视频在线观看 亚洲欧| 一个人www欧美| 日韩亚洲欧美中文在线| 国产成人综合精品在线| 久久精品国产精品亚洲| 成人黄色免费网站在线观看| 欧美激情一区二区三区久久久| 最近2019免费中文字幕视频三| 欧美肥老太性生活视频| 欧美日韩999| 亚洲一区二区三区毛片| 久久久www成人免费精品张筱雨| 国产亚洲视频在线| 欧美老女人xx| 欧美日韩成人在线视频| 日韩中文av在线| 在线观看精品国产视频| 国产视频在线观看一区二区| 日韩二区三区在线| 中文字幕亚洲在线| 韩国精品美女www爽爽爽视频| 久久免费国产精品1| 国产一区二区香蕉| 欧美成在线视频| 疯狂欧美牲乱大交777| 福利一区福利二区微拍刺激| 亚洲女人初尝黑人巨大| 欧美午夜激情在线| 国产亚洲精品一区二区| 国产欧美日韩综合精品| 亚洲欧美日本精品| 亚洲天堂男人天堂女人天堂| 91欧美精品午夜性色福利在线| 欧美在线性爱视频| 精品亚洲一区二区三区四区五区| 亚洲精品国产综合久久| 欧美猛交ⅹxxx乱大交视频| 亚洲无av在线中文字幕| 久久成人免费视频| 色伦专区97中文字幕| 亚洲影院色无极综合| 性色av一区二区咪爱| 欧美日韩一区二区在线| 久久精品这里热有精品| 欧美性xxxxhd| 亚洲人成电影在线播放| 久久久久久亚洲精品不卡| 欧美激情在线有限公司| 国产视频精品一区二区三区| 日本午夜精品理论片a级appf发布| 亚洲iv一区二区三区| 欧美激情一区二区三级高清视频| 国产精品激情av在线播放| 亚洲一区二区久久久久久| 色爱精品视频一区| 在线看日韩av| 久久久久久久一| 亲爱的老师9免费观看全集电视剧| 亚洲自拍av在线| 97人人模人人爽人人喊中文字| 久久精品视频导航| 精品久久久久久久中文字幕| 亚洲福利小视频| 亚洲a在线播放| 欧美wwwxxxx| 国产精品久久二区| 久久久久久欧美| 一区二区欧美激情| 亚洲欧洲视频在线| 精品久久久久久久久中文字幕| 欧美性理论片在线观看片免费| 亚洲欧美日韩综合| 91夜夜揉人人捏人人添红杏| 国产综合色香蕉精品| 日本午夜在线亚洲.国产| 91手机视频在线观看| 精品中文视频在线| 久久久久久这里只有精品| 日韩亚洲综合在线| 欧美日韩成人在线视频| 久久久久久久久综合| 午夜精品久久久久久久白皮肤| 麻豆一区二区在线观看| 成人啪啪免费看| 97超碰蝌蚪网人人做人人爽| 在线播放国产一区二区三区| 在线观看欧美视频| 亚洲视频免费一区| 成人高清视频观看www| 欧美在线中文字幕| 青草青草久热精品视频在线观看| 美日韩在线视频| 色诱女教师一区二区三区| 午夜精品久久久久久久久久久久久| 中文字幕亚洲二区| 欧美日韩免费在线观看| 国产精品美女久久久久av超清| 92国产精品视频| 国产日韩综合一区二区性色av| 国产精品一区二区3区| 国产精品嫩草影院一区二区| 亚洲理论电影网| 日韩在线播放一区| 97超碰蝌蚪网人人做人人爽| 国产乱肥老妇国产一区二| 欧美大片大片在线播放| 日韩欧美国产激情| 亚洲一区二区黄| 欧美视频在线看| 亚洲精品乱码久久久久久金桔影视| 97精品视频在线观看| 欧美成人精品一区二区三区| 欧美日韩色婷婷| 国产精品久久久久国产a级| 日韩网站免费观看高清| 91香蕉国产在线观看| 精品视频www| 精品丝袜一区二区三区| 国产伦精品一区二区三区精品视频| 欧美大片va欧美在线播放| 欧美大尺度在线观看| 欧美激情一区二区三级高清视频| 亚洲精品国产免费| 九九热这里只有精品6|