vue.js 實現(xiàn)評價五角星組件的實例代碼
餓了么的五角星有三種形狀,分別是實星,半星,空星

并且組件要能實現(xiàn),這個五角星不同大小,評分也不一樣,比如滿分五顆星,四顆半星,四顆星等等....
所以需要像組件傳入一個大小:size,一個分數(shù):score
代碼如下:
<template>
<div class="star" :class="starType">
<span class="star-item" :class="itemClass" v-for="itemClass in itemClasses"></span>
</div>
</template>
<script type="text/ecmascript-6">
const LENGTH=5;
const CLS_ON="on";
const CLS_OFF="off";
const CLS_HALF="half";
export default {
props:{
size:{
type:Number
},
score:{
type:Number
}
},
computed:{
starType(){
return "star-"+this.size;
},
itemClasses(){
//計算屬性
let result=[];
let score=Math.floor(this.score*2)/2;
let hasDecimal=score%1!==0; //是否有效數(shù)
let integer=Math.floor(score);//取整
for (var i = 0; i < integer; i++) {
result.push(CLS_ON);
}
if (hasDecimal) {
//有且最多一個半星
result.push(CLS_HALF);
}
while(result.length<LENGTH){
result.push(CLS_OFF);
}
//數(shù)組填充完畢
return result;
}
}
};
</script>
<style lang="stylus" ref="sheetstyle/stylus">
@import "../../common/stylus/mixin.styl";
.star
font-size:0
.star-item
display:inline-block
background-repeat:no-repeat
&.star-48
.star-item
width:20px
height:20px
margin-right:22px
background-size:20px 20px
&:last-child
margin-right:0
&.on
bg-image('star48_on')
&.half
bg-image('star48_half')
&.off
bg-image('star48_off')
&.star-36
.star-item
width:15px
height:15px
margin-right:6px
background-size:15px 15px
&:last-child
margin-right:0
&.on
bg-image('star36_on')
&.half
bg-image('star36_half')
&.off
bg-image('star36_off')
&.star-24
.star-item
width:10px
height:10px
margin-right:3px
background-size:10px 10px
&:last-child
margin-right:0
&.on
bg-image('star24_on')
&.half
bg-image('star24_half')
&.off
bg-image('star24_off')
</style>
其中:使用了size為48,36,24,所以我們需要圖片3種類型的圖片,并且要使用適應(yīng)不同分辨率,要有@2x.png,@3x.png圖片

對了,bg-image方法是在mixin.styl中的,代碼如下
bg-image($url)
background-image:url($url+"@2x.png")
@media (-webkit-min-device-pixel-ratio:3),(min-device-pixel-ratio:3)
background-image:url($url+"@3x.png")
組件的使用就很簡單了
<star :size="48" :score="3.5"></star>

總結(jié)
以上所述是小編給大家介紹的vue.js 實現(xiàn)評價五角星組件的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Element-Ui組件 NavMenu 導(dǎo)航菜單的具體使用
這篇文章主要介紹了Element-Ui組件 NavMenu 導(dǎo)航菜單的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2019-10-10
vuex中this.$store.commit和this.$store.dispatch的基本用法實例
在vue的項目里常常會遇到父子組件間需要進行數(shù)據(jù)傳遞的情況,下面這篇文章主要給大家介紹了關(guān)于vuex中this.$store.commit和this.$store.dispatch的基本用法的相關(guān)資料,需要的朋友可以參考下2023-01-01
vue項目怎樣用nginx反向代理WebSocket請求地址
這篇文章主要介紹了vue項目怎樣用nginx反向代理WebSocket請求地址問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
解決IE11 vue +webpack 項目中數(shù)據(jù)更新后頁面沒有刷新的問題
今天小編就為大家分享一篇解決IE11 vue +webpack 項目中數(shù)據(jù)更新后頁面沒有刷新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09

