js實(shí)現(xiàn)多圖和單圖上傳顯示
項(xiàng)目中經(jīng)常會(huì)大量的使用到圖片上傳,之前涉及到的時(shí)候經(jīng)常會(huì)在網(wǎng)上下載一些素材直接拿過來使用,但是隨著項(xiàng)目的增多發(fā)現(xiàn)用的是各式各樣的,導(dǎo)致非?;靵y。所以抽空寫了一個(gè)DEMO來梳理下圖片上傳的流暢以及單圖和多圖上傳需要注意的點(diǎn)。
多圖上傳
多圖上傳,這里僅僅是做了前端的展示效果,實(shí)際項(xiàng)目中,多圖上傳應(yīng)該是每次上傳一張圖片后向后臺(tái)發(fā)送一次請(qǐng)求,后臺(tái)返回img路徑然后進(jìn)行展現(xiàn)。
為什么一定要傳入后臺(tái)在進(jìn)行展現(xiàn)呢?
1.如果直接在前臺(tái)先展現(xiàn)base64圖片路徑,在向后臺(tái)發(fā)送請(qǐng)求。如果接口出現(xiàn)錯(cuò)誤后,會(huì)給用戶產(chǎn)生錯(cuò)覺,以為圖片上傳成功,而這時(shí)后臺(tái)是沒有接收到圖片的;
2.file文件每次發(fā)生變化,會(huì)將之前的files文件給覆蓋掉。如果直接展現(xiàn)不用ajax提交后,最終用form提交只會(huì)提交最后一張。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>多圖上傳/單圖上傳</title> <style> *{ margin: 0; padding: 0; } .box{ width: 1000px; height: 120px; margin: 0 auto; border: 1px solid #ddd; margin-top: 20px; box-sizing: border-box; padding: 10px; } .upload{ width: 100px; height: 100px; float: left; position: relative; overflow: hidden; } .upload input{ position: absolute; z-index: 1000; top:0; left:0; width: 100%; height: 100%; opacity: 0; } .upload a{ display: block; width: 100%; } .upload img{ display: block; width: 100%; height: 100%; } .imgList{ float: left; overflow: hidden; } .imgList .item{ width: 100px; height: 100px; margin-right: 20px; float: left; position: relative; } .imgList .item img{ display: block; width: 100%; height: 100%; } .imgList .item span{ position: absolute; top: 0;right: 0; width: 100%; background: red; color:#fff; height: 20px; width: 20px; text-align: center; border-radius: 50%; cursor: pointer; } </style> </head> <body> <div class="box"> <!-- 放圖片的位置 --> <div class="imgList" id="imgList"></div> <!-- 上傳按鈕 --> <div class="upload"> <input type="file" name="file" value="" multiple accept="image/*" onchange="uploadImg(this);"> <a href="javascript:void(0)" rel="external nofollow" ><img src="z_add.png" alt=""></a> </div> </div> <script> function uploadImg(obj){ var files = obj.files;//獲取上傳文件后的fileList var imgList = [];//聲明空數(shù)組用來接收上傳完成后的圖片 for(var i = 0; i<files.length;i++){ var imgUrl = window.URL.createObjectURL(files[i]);//將文件轉(zhuǎn)換成base64 URL格式 imgList.push(imgUrl);//將url壓入到數(shù)組中 **如果需要圖片統(tǒng)一選擇完畢后,點(diǎn)擊上傳按鈕統(tǒng)一提交,那么直接拿這imgList給后臺(tái)傳遞即可。** // 循環(huán)創(chuàng)建img容器用來放置url在頁面上顯示 var img = document.createElement('img') img.setAttribute("src", imgList[i]); //刪除按鈕 var close = document.createElement('span') close.innerHTML="x" close.className='close' close.setAttribute('onclick',"imgRemove(this)") //創(chuàng)建放置img的盒子 var item = document.createElement('div'); item.className='item'; item.append(img) item.append(close) var box = document.getElementById("imgList"); box.append(item); //ajax向后臺(tái)發(fā)送請(qǐng)求 } } //刪除代碼 function imgRemove(obj){ obj.parentNode.remove() } </script> </body> </html>
單圖上傳
去掉input中的multiple 屬性就變成了單圖上傳;
<input type="file" name="file" value="" accept="image/*" onchange="uploadImg(this);">
按照上邊的代碼直接就可以實(shí)現(xiàn)單圖上傳和多圖上傳。下邊在說下單圖上傳和多圖上傳提交需要注意的;
1.單圖上傳可以跟隨form表單一起提交,給input一個(gè)name值后臺(tái)就可以提交過去;
2.多圖上傳不可以跟form一起提交,因?yàn)槊看紊蟼骱骹ile只會(huì)保留最新的;可以先通過ajax將圖片提交成功后,在form內(nèi)去循環(huán)創(chuàng)建隱藏的input將后臺(tái)返回的路徑設(shè)置成改input的val值最后跟隨form提交;需要注意隱藏的input的name值寫成[]形式,比如:name=“img[]”。這樣在form提交的時(shí)候后臺(tái)就可以接受到所有的圖片;
以上的代碼,適用于前端點(diǎn)擊file上傳圖片后的顯示。具體與后臺(tái)的一些交互可以根據(jù)實(shí)際項(xiàng)目中的需求進(jìn)行增加!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js實(shí)現(xiàn)圖片上傳并正常顯示
- JSP中圖片的上傳與顯示方法實(shí)例詳解
- 圖片上傳即時(shí)顯示縮略圖的js代碼
- jsp中實(shí)現(xiàn)上傳圖片即時(shí)顯示效果功能
- 上傳圖片時(shí)JS自動(dòng)顯示圖片
- JS實(shí)現(xiàn)批量上傳文件并顯示進(jìn)度功能
- JS插件plupload.js實(shí)現(xiàn)多圖上傳并顯示進(jìn)度條
- 利用jsp+Extjs實(shí)現(xiàn)動(dòng)態(tài)顯示文件上傳進(jìn)度
- PHP + plupload.js實(shí)現(xiàn)多圖上傳并顯示進(jìn)度條加刪除實(shí)例代碼
- js兼容火狐顯示上傳圖片預(yù)覽效果的方法
相關(guān)文章
JavaScript初學(xué)者容易犯的幾個(gè)錯(cuò)誤
JavaScript 是對(duì)初學(xué)者比較友好的一門編程語言,基本上花個(gè)半小時(shí)看下語法就能寫出能運(yùn)行的代碼。JavaScript 是動(dòng)態(tài)腳本語言,對(duì)數(shù)據(jù)類型沒有太多的限制,寫起來非常靈活。但正因?yàn)槿绱耍鯇W(xué)者如果不深入了解語言本身,往往會(huì)犯一些錯(cuò)誤,從而導(dǎo)致一些很難發(fā)現(xiàn)的 bug。2021-05-05微信小程序?qū)崿F(xiàn)彈出層禁止頁面滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)彈出層禁止頁面滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07