整个流程是:
- 绑定星星类型的class(48,36,24尺寸),使用starType
- 使用class来显示星星,有3种类型,全星,半星,无星,使用star-item代表星星本身,然后分别使用on,off,half代表三种不同类型的星星
- 一个span代表一个星星项目,并且使用v-for循环将星星项目输出
组合出来的星星html就类似这样
1 | <div class="star star-48"> |
html部分
1 | <template> |
js部分
- 设置常量是为了方便解耦
- 星星计算比较巧妙(根据分数转换为星星数)
- 对于分数score进行2然后向下取整,然后再除以2,是为了获取所有星星的数量,并且这个数量是0.5倍数的,例如4.6 2就是9.2,然后向下取整是9,然后再除以2就是4.5,那么就可以得到一个0.5倍数的星星数,可以转换为4个全星+一个半星
- 对于非整数的星星算作是半个星星,需要知道是否有存在这种情况,所以分数score%1 ,例如8 % 1是0, 8.5 % 1就不是0,并且这个半星只会出现一次,因为半星状态就只要一个
- 没有星星的部分是要补全的,这里使用while循环来处理这种情况
1 | <script> |
css部分
- 引入mixin.styl是为了使用bg-image的mixin,因为之前做了一个mixin是专门处理2x和3x图片的转换
- 因为这里有3种类型的星星图片,分别是48尺寸,36尺寸,24尺寸,所以对于每一个类别的图片分别使用一种class做对应
- 每一种星星的尺寸都是有一种相对应的图片的,例如48尺寸的星星就会有,并且图片放在相对应的vue文件目录下
1 | star48_half@2x.png |