您好,登錄后才能下訂單哦!
這篇文章主要介紹Vue2.0怎么實現(xiàn)移動端圖片上傳功能,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
效果圖如下:
1.DOM代碼
1.1input標(biāo)簽
由于我們是通過input標(biāo)簽的方式進(jìn)行圖片上傳的,但是input標(biāo)簽的樣式有點丑,所以我們隱藏該樣式display: none
<input @change="fileChange($event)" type="file" id="upload_file" multiple />
1.2添加圖片按鈕
如果需要用到此方法,只需要在你的上傳按鈕的地方調(diào)用@click=”chooseType”即可,其他部分代碼為樣式布局僅供參考。
<div class="add" @click="chooseType"> <div class="add-image" align="center"> <i class="icon-camera"></i> //按鈕中的圖片是一個icon字體圖標(biāo) <p class="font13">添加圖片</p> </div> </div>
1.3圖片預(yù)覽區(qū)域
如果需要用到此方法,只需要在你的預(yù)覽區(qū)域進(jìn)行v-for循環(huán)輸出上傳的圖片集合即可。
<div class="add-img" v-show="imgList.length"> <p class="font14">圖片(最多6張,還可上傳<span v-text="6-imgList.length"></span>張)</p> <ul class="img-list"> <li v-for="(url,index) in imgList"> <img class="del" src="../../assets/img/home/btn_clean.png" @click.stop="delImg(index)"/> //del刪除樣式,icon字體圖標(biāo)需要自己找哦 <img :src="url.file.src"> </li> </ul> </div>
1.4圖片預(yù)覽區(qū)域-拓展(1.3為簡單運用,如果有時間后續(xù)會將完整的案例上傳)
如果需要用到此方法,只需要在你的預(yù)覽區(qū)域進(jìn)行v-for循環(huán)輸出上傳的圖片集合即可。本案例還運用的Y-DUI的lightbox組件,如有需要請參照圖片預(yù)覽的調(diào)用方式。此處,也調(diào)用了vue的懶加載和css背景圖自適應(yīng)的方法。
<div class="add-img" v-show="imgList.length"> <p class="font14">圖片(最多6張,還可上傳<span v-text="6-imgList.length"></span>張)</p> <ul class="img-list"> <li v-for="(url,index) in imgList"> <img class="del" src="../../assets/img/home/btn_clean.png" @click.stop="delImg(index)"/> <yd-lightbox> <div class="app-bg"> <yd-lightbox-img class="app-bg" :original="url.file.src" v-lazy:background-image="{src: url.file.src, error: require('../../assets/img/common/img_placeholder400.png'), loading: require('../../assets/img/common/img_placeholder400.png')}"></yd-lightbox-img> </div> </yd-lightbox> </li> </ul> </div>
2.JS代碼塊
tips:此處的提示彈窗調(diào)用的Y-DUI的提示框,可以改成自己的提示框。
<script> export default { name: "Feedback", data() { return { showFace: false, imgList: [], size: 0, limit:6, //限制圖片上傳的數(shù)量 tempImgs:[] } }, methods: { chooseType() { document.getElementById('upload_file').click(); }, fileChange(el) { if (!el.target.files[0].size) return; this.fileList(el.target); el.target.value = '' }, fileList(fileList) { let files = fileList.files; for (let i = 0; i < files.length; i++) { //判斷是否為文件夾 if (files[i].type != '') { this.fileAdd(files[i]); } else { //文件夾處理 this.folders(fileList.items[i]); } } }, //文件夾處理 folders(files) { let _this = this; //判斷是否為原生file if (files.kind) { files = files.webkitGetAsEntry(); } files.createReader().readEntries(function (file) { for (let i = 0; i < file.length; i++) { if (file[i].isFile) { _this.foldersAdd(file[i]); } else { _this.folders(file[i]); } } }); }, foldersAdd(entry) { let _this = this; entry.file(function (file) { _this.fileAdd(file) }) }, fileAdd(file) { if (this.limit !== undefined) this.limit--; if (this.limit !== undefined && this.limit < 0) return; //總大小 this.size = this.size + file.size; //判斷是否為圖片文件 if (file.type.indexOf('image') == -1) { this.$dialog.toast({mes: '請選擇圖片文件'}); } else { let reader = new FileReader(); let image = new Image(); let _this = this; reader.readAsDataURL(file); reader.onload = function () { file.src = this.result; image.onload = function(){ let width = image.width; let height = image.height; file.width = width; file.height = height; _this.imgList.push({ file }); console.log( _this.imgList); }; image.src= file.src; } } }, delImg(index) { this.size = this.size - this.imgList[index].file.size;//總大小 this.imgList.splice(index, 1); if (this.limit !== undefined) this.limit = 6-this.imgList.length; }, displayImg() { } } } </script>
3.CSS樣式代碼塊,僅供參考
太太懶了,沒有一一區(qū)分
.app-bg >>>img{ width: 100%; height: 100%; -webkit-transform: scale(1.03); -moz-transform: scale(1.03); -ms-transform: scale(1.03); -o-transform: scale(1.03); transform: scale(1.03); } textarea { padding: 10px; } .text-length { font-size: 14px; z-index: 999; width: 100%; text-align: right; margin-bottom: 10px; color: #e4e4e4; } .warning { color: #fe9900; } .add-img { width: 100%; padding: 10px; } .add-img p { color: #999; } .mui-content { padding-bottom: 60px; } .mui-content .idea { margin-top: 8px; background-color: #FFFFFF; } .good-item { text-align: center; width: 33%; max-width: 100%; overflow: hidden; padding-right: 10px; padding-bottom: 10px; float: left; } .good-item span { font-size: 15px; height: 30px; line-height: 30px; border-radius: 50px; display: block; width: 100%; color: #333; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; border: 1px solid #CCCCCC; } .mui-table { padding-top: 10px; color: #333; padding-left: calc(0.5% + 10px); } .h-line-behind { line-height: 40px; padding-left: 10px; } .question { border: 0; margin-bottom: 10px; } .add { display: inline-block; margin-bottom: 20px; } .add-image { padding-top: 15px; margin-left: 10px; width: 80px; top: 20px; height: 80px; border: 1px dashed rgba(0, 0, 0, .2); } .add-image .icon-camera { font-size: 24px; } .good-item .choose { color: #fff; background-color: #87582E; color: #FFF; border: 0; } .mui-btn-block { border: 0; border-radius: 0; background-color: #87582E; color: #fff; margin-bottom: 0; bottom: 0; } .mui-buttom { position: fixed; width: 100%; bottom: 0; z-index: 999; } /*九宮格*/ .img-list { overflow: hidden; } .img-list > li { float: left; width: 32%; text-align: center; padding-top: 31%; margin-left: 1%; margin-top: 1%; position: relative; } .img-list > li > div { position: absolute; left: 0; top: 0; width: 100%; height: 100%; overflow: hidden; } .img-list > li > div .app-bg { width: 100%; height: 100%; } .mui-fullscreen { z-index: 9999; } .del { position: absolute; width: 18px; top: 0; right: 0; z-index: 999 }
以上是“Vue2.0怎么實現(xiàn)移動端圖片上傳功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。