【发布时间】:2020-10-12 20:35:41
【问题描述】:
我正在研究星级评分系统,我需要将我的十进制值转换为百分比,以便我可以将其用作顶层的宽度。
其工作方式是两个span 都在彼此之上。顶部为灰色,底部为橙色。底部span 越接近 100% 宽度(85 像素),星星看起来越“饱满”。
一切正常,但现在我需要将传入的reviewStarRating 数字转换为百分比。 reviewStarRating 的值可以是 0 - 5,增量为 0.01。因此,传入reviewStarRating 的一些示例将是 (0.4, 1.3, 2.8, 3.0, 4.2, 4.9, 5.0)。
- 5.0
reviewStarRating将 == 100% - 4.0
reviewStarRating将 == 80% - 3.0
reviewStarRating将 == 60% - 2.0
reviewStarRating将 == 40% - 1.0
reviewStarRating将 == 20% - 0.0
reviewStarRating将 == 0%
HTML
<div class="star-container">
<span class="star-icon grey" [innerHTML]="icons"></span>
<span class="star-icon orange" [ngStyle]="getCssWidth()" [innerHTML]="icons"></span>
</div>
JS / Angular 打字稿
@Input() reviewCount: String;
@Input() reviewStarRating: String;
cssWidth: number = 0;
icon = '★';
icons = `${this.icon}${this.icon}${this.icon}${this.icon}${this.icon}`
constructor() { }
ngOnInit() {
this.calculateCssWidth();
}
public getCssWidth() {
let styles = {
'width': `${this.cssWidth.toString()}px`
}
return styles;
}
calculateCssWidth() {
this.cssWidth = this.round(this.reviewStarRating);
console.log(`${this.reviewStarRating} -> ${this.cssWidth}`);
}
round(num) {
return Math.ceil((num+1)/10)*10;
}
CSS
.star-container {
max-width: 140px;
width: 85px;
height: 20px;
line-height: 20px;
}
.star-container .star-icon {
font-size: 20px;
position: relative;
}
.star-container .star-icon.orange {
color: #f37a1f;
top: -22px;
display: block;
overflow: hidden;
}
.star-container .star-icon.grey {
color: #e3e3e3;
}
.star-container:not(:last-child) {
margin-right: 5px;
}
【问题讨论】:
标签: javascript css angular typescript