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

首頁(yè) > 編程 > HTML > 正文

Html5實(shí)現(xiàn)單張、多張圖片上傳功能

2024-08-26 00:21:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

今天我們聊一聊圖片上傳,單張Or多張 ,如今,各大圖片上傳插件數(shù)不勝數(shù),例如:Jquery的 verupload.js,jQuery File Upload、Uploadify、jQuery.filter等等。But。上面說(shuō)到的這些插件,今天我們不談,我們來(lái)看一看使用HTML5中的FileReader 如何實(shí)現(xiàn) 圖片的單張及多張預(yù)覽、刪除、上傳等功能。先看下實(shí)現(xiàn)后的效果如下:

Html5,圖片上傳

2|0實(shí)現(xiàn)

2|1前端部分

這塊是用戶(hù)點(diǎn)擊按鈕 其中我們最重要的一句話(huà)是input type=file 和給了一個(gè)multiple屬性,可以滿(mǎn)足多張圖片上傳

<div class="form-group form-row">        <label class="col-sm-2 control-label uText">俱樂(lè)部相冊(cè)</label><div class="row">                        <div class="col-xs-10 col-sm-8 mTop5">                            <label                                <input type="file" accept="image/*" name="ClubImagesUpload" id="ClubImagesUpload" class="hide" multiple="multiple">                                <img src="/Images/registerNewSite/btn_addimg.png" class="addImg"/>                            </label>                        </div>                    </div></div>

下面這塊區(qū)域是用于圖片預(yù)覽的

<div class="form-group form-row" id="preViewMore"><div class="row">      <div class="col-xs-9">         <div id="clubInputImagePreview" class="col-sm-9 img-preview img-preview-sm"></div>       </div>  </div></div>

2|2樣式部分

什么?連樣式你都要看,還有沒(méi)有人性(苦笑臉)

2|3Js部分

首先我們分析下上面的html,我們用一個(gè)label把input和一個(gè)img標(biāo)簽包起來(lái)了,我們希望點(diǎn)擊效果圖那個(gè)+號(hào)圖片,就能彈出選擇相片的對(duì)話(huà)框,所以,我們需要先給label來(lái)一個(gè)點(diǎn)擊事件:

$("#btnClubImg").click(function() {    //TODO Something});

接著我們?cè)倏?,因?yàn)槲覀兪且@取上傳的文件,而我們的文件主要是在input上,所以,我們先將input標(biāo)簽獲取到:

$("#btnClubImg").click(function() {      var $input = $("#ClubImagesUpload");     console.log($input);//打印當(dāng)前元素});

我們將當(dāng)前input元素標(biāo)簽打印出來(lái)看看是個(gè)什么東東

Html5,圖片上傳

我們展開(kāi)第一項(xiàng)會(huì)發(fā)現(xiàn)files里面length長(zhǎng)度是0

Html5,圖片上傳

好,我們繼續(xù)分析,因?yàn)槲覀兿胍墚?dāng)input框改變的時(shí)候,說(shuō)簡(jiǎn)單點(diǎn) 就是有選擇到文件的時(shí)候,我們能獲取到當(dāng)前選擇的文件,這個(gè)和獲取input框文字輸入是一樣的道理,所以,經(jīng)過(guò)分析,我們知道需要給input標(biāo)簽加一個(gè)change事件:

 $("#btnClubImg").click(function() {      var $input = $("#ClubImagesUpload");      console.log($input);      $input.on("change", function () {         console.log(this);//打印改變后的當(dāng)前元素  });});   

讓我們來(lái)瞄一眼,獲取到改變后的input元素里面有些啥東東:

Html5,圖片上傳

這里很清楚得可以看到,我們獲取到了選擇的圖片,包括有最后修改事件,圖片名稱(chēng),大小以及圖片類(lèi)型(有了文件類(lèi)型,我們就可以判斷當(dāng)前用戶(hù)選擇的是否是圖片不是嗎(斜眼笑)) 同樣,這是單個(gè)文件的, 如果是多個(gè)文件,就會(huì)有多個(gè)file

Html5,圖片上傳

接著往下看,通過(guò)打印輸出我們可以看到,我們?cè)賗nput 標(biāo)簽的files元素上已經(jīng)拿到了我們想要的文件信息,我們只需要獲取它們就行了:

 var files = this.files; var length = files.length;

這樣,我們就可以獲取到所有文件,以及文件的個(gè)數(shù),那這里問(wèn)題來(lái)了,我們?nèi)绻沁x擇多個(gè)文件,如果將其依次輸出并展示到頁(yè)面上呢?看到上面標(biāo)注的四個(gè)字,腦袋中有沒(méi)有閃現(xiàn)出兩個(gè)字呢?循環(huán)

 $.each(files, function (key, value) {        //TOTO Something  });

通過(guò)將上面得到的files 循環(huán),我們可以依次得到每個(gè)文件的信息。這樣,你就不僅可以將其依次輸出,如果你愿意,你還可以將其送上天~

var fileReader = new FileReader();//實(shí)例化一個(gè)FileReader對(duì)象var file_ = files[key];//獲取當(dāng)前文件if (/^image///w+$/.test(file_.type)) {//將當(dāng)前文件進(jìn)行正則匹配,看是否是選擇的圖片      fileReader.onload = function() {//當(dāng)讀取操作完成時(shí)調(diào)用       }         } 

有必要延伸下FileReader的知識(shí)點(diǎn):

FileReader主要用于將文件內(nèi)容讀入內(nèi)存,通過(guò)一系列異步接口,可以在主線(xiàn)程中訪(fǎng)問(wèn)本地文件。

使用FileReader對(duì)象,web應(yīng)用程序可以異步的讀取存儲(chǔ)在用戶(hù)計(jì)算機(jī)上的文件(或者原始數(shù)據(jù)緩沖)內(nèi)容,可以使用File對(duì)象或者Blob對(duì)象來(lái)指定所要處理的文件或數(shù)據(jù)。

Html5,圖片上傳

回到主題,我們已經(jīng)能夠得到文件并且得到返回,所以此時(shí),我們只需要展示返回的結(jié)果就行了

$("#clubInputImagePreview").css("background-image", "url(" + this.result + ")");

我們將其this.result打印出來(lái)看看是個(gè)什么東東:

Html5,圖片上傳

不言而喻,是將圖片轉(zhuǎn)換成了Base64的數(shù)據(jù)格式。最后,我們調(diào)用 readAsDataURL 讀取文件內(nèi)容,將其用data:url字符串表示出來(lái)

fileReader.readAsDataURL(value);

這樣,你就可以得到一個(gè)簡(jiǎn)易的圖片上傳的Demo了,但是并不是最終的,因?yàn)槟氵€需要加很多業(yè)務(wù)進(jìn)去。比如:得到一張預(yù)覽圖片后,當(dāng)前標(biāo)簽會(huì)被占用,如果下次循環(huán)進(jìn)來(lái),直接使用原標(biāo)簽,肯定會(huì)將之前的圖片替換,那這肯定不是我們想要的效果,我們希望是能依次展示,而不是替換展示。所以,我們還需要做一些處理:

 $("#clubInputImagePreview").css("background-image", "url(" + this.result + ")");//使用apend再當(dāng)前元素下追加一個(gè)子節(jié)點(diǎn) $("#clubInputImagePreview") .append("<img src='/Images/registerNewSite/btn_r_del.png' class='clubsImage'  id='ImgRemove' />");//使用after 向當(dāng)前兄弟節(jié)點(diǎn) 追加一個(gè)同級(jí)節(jié)點(diǎn)                                       $("#clubInputImagePreview").after( "<div id='clubInputImagePreview1' class='col-sm-9 img-preview img-preview-sm delImg' ></div>");

然后我們追加的刪除圖片,也需要給其點(diǎn)擊事件,讓我們的當(dāng)前預(yù)覽區(qū)域消失:

$("#ImgRemove").click(function () {          $(this).parent().remove();});

最后,你會(huì)發(fā)現(xiàn)結(jié)果還不是我們想要的,那是因?yàn)?當(dāng)前ID還在,所以無(wú)法進(jìn)行下一步操作,而我們只需要將當(dāng)前元素的Id Remove掉,然后新增一個(gè)同ID的元素,這樣瀏覽器就會(huì)認(rèn)為這是一個(gè)新的元素:

 $input.removeAttr("id"); var newInput ='<input type="file" accept="image/*" name="ClubImagesUpload" id="ClubImagesUpload" class="hide" multiple="multiple">'; $(this).append($(newInput));

最后完整JS代碼如下:

  var intP = 0;        $("#btnClubImg").click(function() {            var $input = $("#ClubImagesUpload");//            console.log($input);            $input.on("change",                function () {//                    console.log(this);                    var files = this.files;                    var length = files.length;                    if (intP > 8) {                        layer.msg('圖片不能再多了~', {});                        return;                    }                    $.each(files,                        function (key, value) {                            var fileReader = new FileReader();                            var file_ = files[key];                            if (/^image///w+$/.test(file_.type)) {                                fileReader.onload = function() {                                    if (intP > 8) {                                        layer.msg('圖片不能再多了~', {});                                        return;                                    }                                    if (key == 0 && intP == 0) {                                        console.log(this.result);                                        $("#clubInputImagePreview").css("background-image", "url(" + this.result + ")");                                        $("#clubInputImagePreview")                                            .append(                                            "<img src='/Images/registerNewSite/btn_r_del.png' class='clubsImage'  id='ImgRemove' />");                                        $("#clubInputImagePreview").after(                                            "<div id='clubInputImagePreview1' class='col-sm-9 img-preview img-preview-sm delImg'></div>");                                    } else {                                        $("#clubInputImagePreview" + parseInt(intP) + "").css("background-image",                                            "url(" + this.result + ")");                                        $("#clubInputImagePreview" + parseInt(intP) + "").append(                                            "<img src='/Images/registerNewSite/btn_r_del.png' class='clubsImage'  id='ImgRemove" +                                            parseInt(parseInt(1) + parseInt(intP)) +"' />");                                        $("#clubInputImagePreview" + parseInt(intP) + "").after(                                            "<div id='clubInputImagePreview" +                                            parseInt(parseInt(1) + parseInt(intP)) +                                            "'class='col-sm-9 img-preview img-preview-sm delImg' ></div>");                                    }                                    if (key == 0 && intP == 0) {                                        $("#ImgRemove").click(function () {                                            $(this).parent().remove();                                        });                                    } else {                                        $("#ImgRemove" + parseInt(parseInt(1) + parseInt(intP)) + "").click(function () {                                            $(this).parent().remove();                                        });                                    }                                    intP += parseInt(1);                                };                                fileReader.readAsDataURL(value);                            } else {                                layer.msg("格式錯(cuò)誤<br/>請(qǐng)選擇一個(gè)圖片文件");                            }                        });                });            $input.removeAttr("id");            var newInput =                '<input type="file" accept="image/*" name="ClubImagesUpload" id="ClubImagesUpload" class="hide" multiple="multiple">';            $(this).append($(newInput));        });

總結(jié)

以上所述是小編給大家介紹的Html5實(shí)現(xiàn)單張、多張圖片上傳功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲xx在线| 福利在线午夜| 99re在线视频观看| 中国成人一区| 欧美1区2区| 一区二区三区欧美久久| 久久综合色天天久久综合图片| 久久精品人妻一区二区三区| 91精品推荐| 国产精品色噜噜| 多人啪嗒啪嗒在线观看免费| 久久精品ww人人做人人爽| 国产成人精品亚洲日本在线桃色| 成人免费va视频| 亚洲无在线观看| 国产福利视频一区二区| 精品久久在线观看| 亚洲男男gay视频| 天堂一区二区在线| 九色国产蝌蚪视频| 亚洲97在线观看| 999在线观看免费大全电视剧| 久久精品美女视频网站| 日本阿v视频在线观看| 欧美三级超在线视频| 国产一卡二卡三卡四卡| 亚洲日本国产精品| av在线影音| 成人18精品视频| 色综合天天天天做夜夜夜夜做| 精品动漫一区二区三区| 日韩精品一级中文字幕精品视频免费观看| 黄色网址免费在线| 好看的av在线不卡观看| 久久久久99人妻一区二区三区| 嫩草影院入口一二三免费| 国产精品99免视看9| 亚洲精品国产精| 男插女免费视频| 成人午夜免费在线视频| 老色鬼在线视频| 亚洲视频一区在线| 欧美日韩国产va另类| 久久99精品久久久久久琪琪| 国产欧美日韩网站| 成人国产精品免费观看动漫| 欧美高清视频在线观看| 高清精品视频| 亚洲性猛交富婆| 国内自拍视频在线观看| 欧美精选午夜久久久乱码6080| 国产粉嫩一区二区三区在线观看| 国产精品一区二区av交换| 91亚洲va在线va天堂va国| 日韩精品午夜| 青娱在线视频| 亚洲热在线观看| 国产精品一二三产区| 麻豆网站在线观看| 久久久久国色av免费看影院| 大肉大捧一进一出好爽| 国产婷婷精品av在线| 亚洲av少妇一区二区在线观看| 亚洲七七久久综合桃花剧情介绍| 亚洲精品v亚洲精品v日韩精品| 中日韩在线观看视频| 国产精品护士白丝一区av| 天堂电影在线| 欧美主播福利视频| 91久久夜色精品国产按摩| 亚洲国产欧美一区二区丝袜黑人| 丝袜美腿亚洲一区二区| 色999日韩国产欧美一区二区| 最新亚洲国产| 精品小视频在线观看| 亚洲免费电影一区| 麻豆短视频在线观看| 国产午夜免费福利| 色偷偷偷在线视频播放| 亚洲一区二区三区综合| 最近日韩免费视频| 黄网站免费在线观看| 香港三日本三级少妇66| 国产精品99久久久久久大便| 九九热在线视频观看这里只有精品| 国产一区二区在线观看免费视频| 国产成人无码精品久久久久| 国产69久久| 天堂久久av| 国产精品专区第二| 精品69视频一区二区三区Q| 欧美日韩成人在线视频| 欧美精品一区二区三区久久久| 日韩精品中文字幕一区二区三区| 日韩亚洲欧美一区二区三区| 国产精品尤物福利片在线观看| 日韩午夜激情视频| 精品捆绑调教一区二区三区| 国产成人精品影视| 午夜成人亚洲理伦片在线观看| 国产精品自产拍在线观看2019| 欧美在线影院一区二区| 日韩电影在线观看永久视频免费网站| 亚洲影影院av| 人妻无码一区二区三区免费| 日韩av自拍| 国产免费av国片精品草莓男男| av视屏在线播放| 一区二区三区在线免费视频| a天堂资源在线| 亚州欧美日韩中文视频| 亚洲一区观看| 直接看的黄色网址| 亚洲福利视频免费观看| 精品国产第一国产综合精品| 91在线国产剧情| 欧美日韩国产系列| 亚洲影视在线观看| 国产福利精品导航| 国产精品成人99一区无码| 三级黄在线观看| 成人黄色免费| 久久久久久成人| 性高潮久久久久久久久久| 日韩伦理福利| 一二三区在线视频| 激情综合网婷婷| 欧美午夜激情视频| 亚洲欧洲高清| 最新av免费在线| 亚州国产精品久久久| 超碰国产一区| 亚洲精华液一区二区三区| 亚洲日本va在线观看| 国产午夜亚洲精品羞羞网站| 福利91精品一区二区三区| 又紧又大又爽精品一区二区| 中文字幕在线官网| 日本泡妞xxxx免费视频软件| 男女啪啪免费观看| 亚洲男人的天堂在线| 侵犯稚嫩小箩莉h文系列小说| 欧美日韩国产高清视频| 色乱码一区二区三区网站| 欧美亚洲在线播放| 妖精视频在线观看免费| 天堂在线免费观看视频| jizz国产在线| 韩国一区二区三区四区| 国产成人一区| 欧美黑人3p| 91丨国产丨九色丨pron| 在线看一区二区| 日韩欧乱色一区二区三区在线| 日韩成人av电影在线| 亚洲电影小说图| www.就去干.com| 亚洲免费视频在线观看| 国产色一区二区三区| 3d成人动漫在线| 欧美性猛片xxxxx免费中国| 亚洲一区二区三区毛片| 国产伦精品一区二区免费| 69影院欧美专区视频| 日本成人午夜影院| 国产成人亚洲综合青青| 91成人在线观看喷潮教学| 欧美另类videos| 一区二区91美女张开腿让人桶| 亚洲v在线看| 在线看片第一页欧美| 久久久久久久尹人综合网亚洲| 激情五月五月婷婷| 色8久久久久| 妺妺窝人体色www聚色窝仙踪| 欧美视频在线观看一区二区三区| 国产特黄级aaaaa片免| 欧美人与物videos另类xxxxx| 国产精品一区二区在线免费观看| 中文区中文字幕免费看| 亚洲影院高清在线| 你懂的国产精品永久在线| 99成人精品视频| 日本黄色电影网站| 国产素人在线观看| 国产三级精品三级在线观看| h色网站在线观看| 国产模特精品视频久久久久| 亚洲free性xxxx护士白浆| 九色精品免费永久在线| 久久久福利影院| 激情综合五月| 美洲天堂一区二卡三卡四卡视频| 国产精品久久久久久久电影| 国产中文精品久高清在线不| 国产寡妇亲子伦一区二区三区四区| www.国产一区二区| gogogo免费视频观看亚洲一| 色中色一区二区| 精品国产影院| 欧美一级视频免费在线观看| 国产一区二区三区四区大秀| 波多野结衣电影在线播放| 亚洲无限乱码一二三四麻| bt在线麻豆视频| 欧美a级在线| av手机在线看| 日韩风俗一区 二区| 影音先锋日韩av| 97精品久久久午夜一区二区三区| 欧美日韩精品欧美日韩精品一| 色噜噜一区二区| 9999热视频| 久久av秘一区二区三区| 欧美丰满少妇xxxbbb| 综合久久久久久久| 在线观看日韩一区二区| av播放在线观看| 69国产精品成人在线播放| 五月天婷婷丁香网| 真人bbbbbbbbb毛片| 91麻豆国产福利在线观看| 国产精品一二三区视频| 1024亚洲| 一本一本久久a久久精品综合妖精| 蜜臀久久久久久999| 国产夫绿帽单男3p精品视频| 美女网站在线看| 成人免费黄色av| 精品嫩草影院| 国产一区二区三区探花| 9191精品国产综合久久久久久| av资源网在线观看| 最新国产精品久久久| 色久综合一二码| 国产精品视频久久| 欧美亚洲成人xxx| 成人在线视频免费看| baoyu135国产精品免费| 成人不卡免费av| 5566先锋影音夜色资源站在线观看| 日韩一区二区视频在线观看| 久久蜜桃资源一区二区老牛| xxxx日本黄色| 欧美成年网站| 国产一区二区三区免费观看在线| 亚洲成人激情社区| 亚洲天堂2014| 中文字幕成人乱码在线电影| 成人国产激情| 91沈先生播放一区二区| 色综合久久中文综合久久牛| 欧美日韩一区综合| 国产精品久久久久久久天堂第1集| 国产一区二区三区不卡av| www.一区二区.com| 手机av在线不卡| 国内精品久久久久久久97牛牛| 777欧美精品| 国产女主播在线播放| av一区二区三区在线观看| 91福利在线视频| 手机av在线不卡| 成人激情电影在线| 色99中文字幕| 九九精品视频在线观看九九| 国产精品精品国产一区二区| 亚洲成人三区| free性中国hd国语露脸| 97人人爽人人喊人人模波多| 6080午夜| 黄大色黄女片18免费| 91麻豆产精品久久久久久夏晴子| 日韩欧美精品在线观看| 性高湖久久久久久久久| 国产成人三级在线观看| 国产亚洲女人久久久久毛片| 国产女人高潮毛片| 欧美性感美女一区二区| av毛片在线免费| 在线中文字幕第一页| 99久久精品一区| 亚洲色图图片| 欧美揉bbbbb揉bbbbb| 国产小视频一区| 久草手机在线视频| 中文字幕中文字幕精品| 精品国产自在久精品国产| 99久久精品国产网站| 日韩电影天堂视频一区二区| 中文字幕无码精品亚洲35| 亚洲精品动漫| 国产丝袜视频在线播放| 久草资源站在线观看| 欧美 变态 另类 人妖| 五月婷婷视频在线观看| 欧美精品一区二区三区久久久| 好男人香蕉影院| 潘金莲一级淫片aaaaa| 色一情一乱一乱一区91| 欧美三级电影在线| 欧美国产日韩一区二区在线观看| 久久午夜鲁丝片午夜精品| 真实国产乱子伦精品一区二区三区| 欧美性xxxxxbbbbbb精品| 国产精品久久久久影院色老大| 老司机精品导航| 亚洲欧洲中文字幕| 欧美一区2区视频在线观看| 国产哺乳奶水91在线播放| 亚洲欧美999| 亚洲自拍偷拍网站| 国产熟女一区二区三区四区| 国产91精品久久久久久久网曝门| 久久亚洲精品伦理| 国产精品黑丝在线播放| 在线观看国产精品91| 日韩欧美视频| 色成人免费网站| 欧美激情一二三| 亚洲综合男人的天堂| 久久久国产精品| 美女18一级毛片一品久道久久综合| gogo大尺度成人免费视频| 国产精品第一视频| 大陆一级毛片免费观看| 欧美成人第一页| 欧美另类videoxo高潮|