vue实现五星评价方法

1、需求:

根据用户评分来判断星星被点亮多少颗。保留小数,大于等于零点五,则多显示半颗星,否则只显示整数值。如:

3.3分只显示3颗星;3.6分,则显示3颗完整的星星,加上一个被点亮了一半的信息。

2、准备工作

准备3张img,分别是全部被点亮的、只点亮一半的、未点亮的

 

3、分析实现思路

这里假设用户评分为4.7分,那么根据需求,就是显示4个完整的被点亮的星星,一个被点亮一半的星星。

我们可以定义一个数组,里面存放4个完整的星星的样式,1个点亮一半的星星的样式。然后通过v-for循环遍历。

<div class="star">
   <span class="star-item" v-for="(itemClass, index) in itemClass" :key="index" :class="itemClass"></span>
</div>

// 星星总长度
const LENGTH = 5;

// 星星的状态
const CLS_ON = "on";        // 全星
const CLS_HALF = "half";    // 半星
const CLS_OFF = "off";      // 剩余未点亮的星星

export default {
    name: 'star',
    data () {
        return {
            score: 4.7
        }
    },
    computed: {
        itemClass() {
            let result = [];
            let score = Math.floor(this.score * 2) / 2;
            let hasDecimal = score % 1 !== 0;
            let integer = Math.floor(score);

            for(let i = 0; i < integer; i++) {
                result.push(CLS_ON);
            }

            // 是否有半个星星
            if(hasDecimal) {
                result.push(CLS_HALF);
            }

            // 补齐
            while(result.length < LENGTH) {
                result.push(CLS_OFF);
            }
            return result
        }
    },

}
.star .star-item{
    display: inline-block;
    width: 10px;
    height: 10px;
    margin-right: 3px;
    background-repeat: no-repeat;
    background-size: 10px 10px;
}

/* 三种图片类型*/
.star .on{
    background-image: url(img/star24_on@2x.png);
}
.star .half{
    background-image: url(img/star24_half@2x.png);
}
.star .off{
    background-image: url(img/star24_off@2x.png);
}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值