微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

js评分组件使用详解

我们知道,许多外卖app都有评分的星星,这里我总结一下对评分组件的开发,学习视频:饿了么实战(网)

1.html部分

rush:xhtml;">

解释

1.在大的div里绑定starType是因为在整个App中,有多个评分组件,而它们的大小不一样,所以根据大小动态的绑定class.

同样的原理,在上一节header组件开发中也有介绍,但直到写到这里我开始渐渐明白vue.js中:class的意义。以前我想既然可以直接添加class,为什么要用绑定class来多此一举。现在我明白的,基础的样式设定,直接添加class就可以了,但是有时候涉及到根据不同的状态有不同的样式时,就要用绑定class了。

2.v-for 这里我们没有写5个span,而是遍历itemClasses,这是vue.js中的一种常用方法。既减少了代码,而且动态获取数据。

2.js部分

1. 得到评分数据

像上一节一样,我们通过props来接收数据。我们要接收的是两个number类型的数据,一个是星星的尺寸,一个是分数。

rush:js;"> props: { size:{ type:Number },score:{ type:Number } }

2.属性的计算

1).接收size动态绑定不同的class

rush:css;"> starType() { return 'star-'+this.size; } .star-48 { width: 20px; height: 20px; margin-right: 22px; background-size: 20px 20px;

}
.star-36 {
width: 15px;
height: 15px;
margin-right: 6px;
background-size: 15px 15px;
}
.star-24 {
width: 10px;
height: 10px;
margin-right: 3px;
background-size: 10px 10px;
}

2). 通过计算确定添加全星半星和无星

rush:js;"> const LENGTH = 5; const CLS_ON = 'on'; const CLS_HALF = 'half'; const CLS_OFF = 'off'; itemClasses() { let result = []; let score = Math.floor(this.score*2)/2; let hasDecimal = score%1 !== 0; 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

这段代码的思路是:创建一个数组储存星星,判断分数是否在.5以上,将分数取整,有多少分push几个on星星进去,有.5以上,push一个half,然后push进off直到长度达到5。

3).css部分 以star-48的尺寸为例

rush:css;"> .star-48 .on { background-image: url('star48_on@2x.png') } .star-48 .half { background-image: url('star48_half@2x.png') } .star-48 .off { background-image: url('star48_off@2x.png') }

4.完整代码

rush:xhtml;">

<script type="text/javascript">
const LENGTH = 5;
const CLS_ON = 'on';
const CLS_HALF = 'half';
const CLS_OFF = 'off';
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;
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);
}
return result;
}

}
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐