评分算法(五星好评为例-vue)
整体思路就是把所有的亮星,半星以及暗星放进一个数组一般的评分后台仅仅只是返回一个数据,需要我们处理这个数据之后在前台显示出来图形化的星星.首先定义常量://星星的最大长度const LENGTH = 5//亮星const CLS_ON = 'on'//半星const CLS_HALF = 'half'//暗星const CLS_OFF = 'of...
·
整体思路就是把所有的亮星,半星以及暗星放进一个数组
一般的评分后台仅仅只是返回一个数据,需要我们处理这个数据之后在前台显示出来图形化的星星.
首先定义常量:
//星星的最大长度
const LENGTH = 5
//亮星
const CLS_ON = 'on'
//半星
const CLS_HALF = 'half'
//暗星
const CLS_OFF = 'off'
其次定义一个方法:
itemClasses() {
//定义放置结果的数组
let result = []
//定义得分(先乘2再下取整最后再除以2,让得分大于*.5的最后都会返回*.5,得分小于*.5的最后都返回一个整数,
以此来判断是否存在半星),this.score代表父组件传过来的数据,props接收.
const score = Math.floor(this.score * 2) / 2
//是否有小数(取余不为0)
const hasDecimal = score % 1 !== 0
//对得分下取整,处理亮星
const integer = Math.floor(score)
//循环处理,将亮星有多少push进结果数组中
for (let i = 0; i < integer; i++) {
result.push(CLS_ON)
}
//如果存在小数,就push一个半星
if (hasDecimal) {
result.push(CLS_HALF)
}
//如果数组结果小于预设最大长度,就push暗星进结果数组中
while (result.length < LENGTH) {
result.push(CLS_OFF)
}
//返回结果
return result
}
最后循环处理结果数组result就ok;
<span v-for="(itemClass,index) in itemClasses" :class="itemClass" class="star-item" :key="index"></span>
更多推荐
已为社区贡献1条内容
所有评论(0)