vue實(shí)現(xiàn)類似淘寶商品評價(jià)頁面星級評價(jià)及上傳多張圖片功能
最近在寫一個(gè)關(guān)于vue的商城項(xiàng)目,然后集成在移動(dòng)端中,開發(fā)需求中有一界面,類似淘寶商城評價(jià)界面!實(shí)現(xiàn)效果圖如下所示:
評價(jià)頁
點(diǎn)擊看大圖,且可左右滑動(dòng)
功能需求分析
1.默認(rèn)為5顆星,為非常滿意,4顆滿意,根據(jù)不同星級顯示不同滿意程度。
2.評價(jià)內(nèi)容,最多為200字。
3.上傳圖片最多上傳6張,圖片不可拉伸,可刪除,可點(diǎn)擊放大左右滑動(dòng)展示
具體實(shí)現(xiàn)關(guān)鍵代碼
關(guān)于星級功能:
寫一個(gè)五星數(shù)組,默認(rèn)數(shù)組中有亮的星級圖片,用bool值判斷是否變暗。
默認(rèn)星級數(shù)組
點(diǎn)擊實(shí)現(xiàn)的關(guān)鍵代碼:
// 評分 rating: function (index, string) { var total = this.stars.length // 星星總數(shù) var idx = index + 1 // 這代表選的第idx顆星-也代表應(yīng)該顯示的星星數(shù)量 // 進(jìn)入if說明頁面為初始狀態(tài) if (this.scoreStartNum === 0) { this.scoreStartNum = idx for (var i = 0; i < idx; i++) { this.stars[i].src = starOnImg this.stars[i].active = true } } else { // 如果再次點(diǎn)擊當(dāng)前選中的星級-僅取消掉當(dāng)前星級,保留之前的。 if (idx == this.scoreStartNum) { for (var i = index; i < total; i++) { if (i != 0) { this.stars[i].src = starOffImg this.stars[i].active = false } } } // 如果小于當(dāng)前最高星級,則直接保留當(dāng)前星級 if (idx < this.scoreStartNum) { for (var i = idx; i < this.scoreStartNum; i++) { if (i != 0) { this.stars[i].src = starOffImg this.stars[i].active = false } } } // 如果大于當(dāng)前星級,則直接選到該星級 if (idx > this.scoreStartNum) { for (var i = 0; i < idx; i++) { this.stars[i].src = starOnImg this.stars[i].active = true } } var count = 0 // 計(jì)數(shù)器-統(tǒng)計(jì)當(dāng)前有幾顆星 for (var i = 0; i < total; i++) { if (this.stars[i].active) { count++ } } this.scoreStartNum = count } if (this.scoreStartNum === 1) { this.scoreInfo = '很差' } else if (this.scoreStartNum === 2) { this.scoreInfo = '差' } else if (this.scoreStartNum === 3) { this.scoreInfo = '一般' } else if (this.scoreStartNum === 4) { this.scoreInfo = '滿意' } else if (this.scoreStartNum === 5) { this.scoreInfo = '很滿意' }
2. 評價(jià)內(nèi)容輸入
<textarea v-bind:maxlength="Surplus" @input="descArea" v-model="inputText" name="abstract" id="abstract" placeholder="寶貝滿足你的期待嗎?說說你的使用心得,分享給想買的他們吧!"></textarea>
Surplus 表示最大限制字?jǐn)?shù),v-model綁定輸入字體,去掉邊框可以設(shè)置:border: none;
上傳多張圖片功能
單獨(dú)寫了個(gè)uploadImages組件,用input來設(shè)置圖片上傳
<input type="file" class="input-file" multiple="multiple" name="avatar" ref="avatarInput" @change="changeImage($event)" accept="image/gif,image/jpeg,image/jpg,image/png">
在@change="handleChange"
拿到圖片信息,有兩種方式展示:
圖片流形式展示圖片
let reader = new FileReader() let that = this reader.readAsDataURL(file) reader.onload = function (e) { console.log(this.result) that.imgUrls.push(this.result) }
2.上傳阿里云等第三方,直接拿到圖片url路徑,在此我用的第一種方式。
用mint-ui的錄播圖形式來做圖片的左右滑動(dòng)功能。
<mt-swipe :auto="0" :show-indicators="false" @change="handleChange" :continuous="false" :defaultIndex="num"> <mt-swipe-item v-for="(item,index) in imgUrls" :key="item.id"> <div class="num" >{{index+1+'/'+imgUrls.length}}</div> <img :src="imgUrls[index]" class="img"/> </mt-swipe-item> </mt-swipe>
:auto="0"為不自動(dòng)播放,:show-indicators="false"
表示不展示下面的圓點(diǎn),:defaultIndex="num"
默認(rèn)展示第幾張圖片,:continuous="false"
是否重復(fù)播放。
關(guān)鍵代碼為:
methods: { //拿到圖片信息轉(zhuǎn)化為圖片流 changeImage: function (e) { if (e.target.files.length <= (this.maxImages - this.imgUrls.length)) { for (var i = 0; i < e.target.files.length; i++) { let file = e.target.files[i] this.file = file console.log(this.file) let reader = new FileReader() let that = this reader.readAsDataURL(file) reader.onload = function (e) { console.log(this.result) that.imgUrls.push(this.result) } } // 剩余張數(shù) this.leftImages = this.maxImages - (this.imgUrls.length + e.target.files.length) this.pictureNums = String(this.maxImages - (this.imgUrls.length + e.target.files.length)) + '/' + String(this.maxImages) } else { Toast('只能選擇' + (this.maxImages - this.imgUrls.length) + '張了') } }, //刪除 delect (index) { this.imgUrls.splice(index, 1) this.leftImages++ console.log('數(shù)量' + this.leftImages) if (this.leftImages == this.maxImages) { this.pictureNums = '上傳圖片' } else { this.pictureNums = String(this.leftImages) + '/' + String(this.maxImages) } }, //輪播圖滑動(dòng)改變index handleChange(index){ this.num = index }, //看大圖 bigImg (index) { this.showBigImg = true this.num = index } }
樣式如下
<template> <div class="avatar"> <!--展示圖片--> <div class="hasPic" v-if="imgUrls.length>0" v-for="(item,index) in imgUrls"> <img class="seledPic" ref="picture" :src="item?item:require('../../static/images/imagebj.jpg')" name="avatar" @click="bigImg(index)"> <img class="delect" src="../../static/images/del.png" @click="delect(index)"> </div> <!--點(diǎn)擊方法圖左右滑動(dòng)--> <div class="imgMask" v-if="showBigImg" @click.stop="showBigImg=!showBigImg"> <div class="showImg"> <mt-swipe :auto="0" :show-indicators="false" @change="handleChange" :continuous="false" :defaultIndex="num"> <mt-swipe-item v-for="(item,index) in imgUrls" :key="item.id"> <div class="num" >{{index+1+'/'+imgUrls.length}}</div> <img :src="imgUrls[index]" class="img"/> </mt-swipe-item> </mt-swipe> </div> </div> <!--默認(rèn)圖片--> <div class="selPic" v-if="imgUrls.length<6"> <img src="../../static/images/imagebj.jpg" name="avatar"> <span>{{pictureNums}}</span> <input type="file" class="input-file" multiple="multiple" name="avatar" ref="avatarInput" @change="changeImage($event)" accept="image/gif,image/jpeg,image/jpg,image/png"> </div> </div> </template>
完整項(xiàng)目地址為:https://github.com/dt8888/publicComment
注意點(diǎn):
1.項(xiàng)目中用到了mint -ui,轉(zhuǎn)移項(xiàng)目中錄播圖代碼時(shí),會(huì)報(bào)錯(cuò),在終端項(xiàng)目中輸入:npm i mint-ui -S
用到了px和rem自動(dòng)轉(zhuǎn)化 http://www.dbjr.com.cn/article/149721.htm
總結(jié)
以上所述是小編給大家介紹的vue實(shí)現(xiàn)類似淘寶商品評價(jià)頁面星級評價(jià)及上傳多張圖片功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
vue項(xiàng)目中如何調(diào)用多個(gè)不同的ip接口
這篇文章主要介紹了vue項(xiàng)目中如何調(diào)用多個(gè)不同的ip接口,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue 自定義標(biāo)簽的src屬性不能使用相對路徑的解決
這篇文章主要介紹了Vue 自定義標(biāo)簽的src屬性不能使用相對路徑的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Vue+Echart柱狀圖實(shí)現(xiàn)疫情數(shù)據(jù)統(tǒng)計(jì)
這篇文章主要介紹了在Vue nuxt項(xiàng)目中,如何使用Echart(百度圖表)柱狀圖來實(shí)現(xiàn)疫情數(shù)據(jù)統(tǒng)計(jì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12vue2.0 實(shí)現(xiàn)頁面導(dǎo)航提示引導(dǎo)的方法
下面小編就為大家分享一篇vue2.0 實(shí)現(xiàn)頁面導(dǎo)航提示引導(dǎo)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03