星级评价的实现

背景: 对产品进行评价时,很多时候我们会用星级进行展示,如下:比分值展示 更加直观友好。
实现:下面就对其不同的需求给其不同的实现方案
1、以粉星展示,星级值为整数个
方案:切一个星星;取到星级值,循环星星展示即可。
过程:略
效果:

2586412-4f840876e8ad6d42.jpeg
WechatIMG9.jpeg

2、以粉星和灰星展示,以显示满格需求,星级粗取值为整数个
方案:切一个粉星一个灰星;取到星级值,先循环星星展示粉星;再用 满格值(这里取5)-星级值 得到 灰星值,循环展示灰星 即可。
过程:略
效果:
2586412-9f2d85843d2ee692.jpeg
WechatIMG10.jpeg

3、以粉星和灰星展示,但星级要精取值为小数,此时就要复杂一些了,
方案:(1)首先我们需要把所有的粉/灰星各放在一起各切一条,
(2)以灰色星条为背景父级盒子,以粉色星条为里子级盒覆盖在灰色星条上,给父级以具体宽度值(灰星值也就是满格是已知的),而子级的宽度(也是关键所在)以百分比的形式赋值且按返回值计算,
结构:<view class="stars"> <view class="starsBox" style="width:{{manyi_val_per}}%"></view> </view>
如何计算:这里有两种方式。 一种是以个数比,(粉星值/灰星值) 100% 即可;一种是宽度值比,更精确一些的,就是要把星星之间的间距也精确考虑在内,为了便于描述,先设一些值,已知星星的宽度为w0,星与星的间距为d0,灰星(满格)为n0,此时我们便知css赋值灰星条长度为w1(亦即w0n0+d0 (n0-1)),返回粉星值为n(为float型),求 粉星条占据灰星条的百分比manyi_val_per。公式为:manyi_val_per = ((nw0+Math.floot(n)*d0)/w1).toFixed(2)
效果展示:
2586412-1ea4afe24d7cd52d.jpeg
WechatIMG7.jpeg

Notes:
*子级的取值为什么要用百分比,而不是px/rem单位值?
主要是在对像数进行适配的时候,在不同的设备下,dpr变化时,灰色宽度随着变化,但计算出的粉色宽度具体值不随着变化,而粉色宽度是以style的方式渲染,就会导致宽度显示不正确;如果使用了百分比,父级变化时,子级也会随着按比例变化,符合了我们的需求。

猜你喜欢

转载自blog.csdn.net/weixin_33866037/article/details/87236009