原生JavaScript实现支持半星评分的五角星组件
作者:拾光时间:2026-10-25 19:29:56浏览:586
本文介绍如何使用原生JavaScript实现一个支持半星评分的五角星组件。通过HTML结构定义星星容器,CSS控制背景图片显示,JS逻辑处理点击事件并计算评分。该实现支持0.5分的步进精度,适用于需要精细评分的前端场景。
原生JavaScript实现支持半星评分的五角星组件
使用原生JavaScript开发一个支持半星评分的五角星组件。该组件允许用户进行0.5分精度的评分操作。以下是具体的实现代码。
HTML结构部分
<div class="setStarRate">
<div class="star">
<span id="star">
<li>
<a href="javascript:void(0)" οnclick="rateStar(1)"></a>
<a href="javascript:void(0)" οnclick="rateStar(2)"></a>
</li>
<li>
<a href="javascript:void(0)" οnclick="rateStar(3)"></a>
<a href="javascript:void(0)" οnclick="rateStar(4)"></a>
</li>
<li>
<a href="javascript:void(0)" οnclick="rateStar(5)"></a>
<a href="javascript:void(0)" οnclick="rateStar(6)"></a>
</li>
<li>
<a href="javascript:void(0)" οnclick="rateStar(7)"></a>
<a href="javascript:void(0)" οnclick="rateStar(8)"></a>
</li>
<li>
<a href="javascript:void(0)" οnclick="rateStar(9)"></a>
<a href="javascript:void(0)" οnclick= "rateStar(10)"></a>
</li>
</span>
</div>
<div class="grade">
<span id="getStarRate">0.0</span>
</div>
</div>CSS样式部分
<style>
.grade span {
margin-left: 15px;
line-height: 30px;
}
span {
width: 50%;
height: 70%;
padding: 0;
margin: 0 25%;
}
span li {
width: 20px;
height: 20px;
display: inline-block;
background: url("") no-repeat;//这里输入灰色状态星星的图片链接
}
span li a {
height: 20px;
width: 10px;
display: inline-block;
display: block;
float: left;
}
</style>JavaScript逻辑部分
function rateStar(index) {
var star = document.getElementById('star');
var items = star.getElementsByTagName("li");
index = parseInt(index) - 1; //因为一个星星由2个a标签组成的,所以减掉1
var tem = -1;
//遍历所有的li标签
for (var i = 0; i < items.length; i++) {
if (index > i * 2) { //当index大于i*2的时候,就填充i个数量的满格星星
items[i].style.background = "url() no-repeat";
items[i].style.backgroundSize = "100% 100%";
} else {
if (tem == -1) {
tem = i;
}
items[i].style.background = "url() no-repeat"; //填充灰色状态的星星
items[i].style.backgroundSize = "100% 100%";
}
}
//判断index是否等于偶数
if (index == parseInt(tem) * 2) {
//当前li元素的背景设置成半格星星状态
items[tem].style.background = "url() no-repeat";
items[tem].style.backgroundSize = "100% 100%";
}
document.getElementById('getStarRate').innerHTML = (parseInt(index) + 1) * 0.5;
},运行效果展示


以上即为本文的全部内容,希望能为读者的学习提供有益参考,同时也欢迎读者继续支持本站。
作者最新文章
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
