JavaScript 纯原生实现星级评分控件
本示例展示如何使用原生 JavaScript 实现一个基于点击的星级评分效果。通过获取 DOM 元素并绑定事件,动态调整星星图标的视觉反馈,适用于无需引入 jQuery 等库的轻量级前端场景。
实现原理与目标
星级评分控件的核心逻辑在于用户点击某一颗星后,该星及其左侧的所有星应显示为“已选/高亮”状态(例如红色),而右侧的星保持默认状态(例如白色)。我们将使用 HTML 表格构建五角星序列,并通过 JavaScript 处理点击事件。
准备条件
确保页面中引入了必要的 <script> 标签,且 HTML 结构包含用于展示星星的容器(如表格)和对应的类名或 ID。
第1步:定义辅助函数以查找索引
首先需要识别用户点击的是哪一颗星。创建一个辅助函数 ArrayIndexOf,用于在数组中查找指定元素的索引位置。
目的: 确定当前点击星星在列表中的相对位置,以便后续遍历修改样式。
参数: arr (数组), element (目标元素)。
代码实现:
function ArrayIndexOf(arr, element) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == element) {
return i;
}
}
return -1;
}
第2步:初始化事件监听器
在页面加载完成后,遍历所有的星星单元格并绑定点击事件。
入口: 页面加载完成时执行。
动作:
- 获取评分表格元素
tblRating。 - 获取表格内所有单元格
tds。 - 为每个单元格添加
onclick事件处理程序tdOnClick。 - 将鼠标光标设置为手型(pointer)以提升用户体验。
可观察状态: 鼠标悬停在星星上时变为手型,点击后触发样式变化。
function IniEvent() {
var tbl = document.getElementById("tblRating");
var tds = tbl.getElementsByTagName("td");
for (var i = 0; i < tds.length; i++) {
var td = tds[i];
td.onclick = tdOnClick;
td.style.cursor = "pointer";
}
}
第3步:处理点击逻辑并更新样式
当用户点击某个星星单元格时,执行以下逻辑:
入口: 单击任意星星单元格。
动作:
- 重新获取表格及所有单元格集合。
- 调用
ArrayIndexOf确定当前点击单元格的索引index。 - 使用循环将所有索引小于等于
index的单元格背景色设为红色(高亮)。 - 使用循环将所有索引大于
index的单元格背景色设为白色(取消高亮)。
重要参数: CSS 颜色值 "red" 和 "white"。
function tdOnClick() {
var tbl = document.getElementById("tblRating");
var tds = tbl.getElementsByTagName("td");
// 查找当前点击的td的索引
var index = ArrayIndexOf(tds, this);
// 之前的td改为红色
for (var i = 0; i <= index; i++) {
tds[i].style.background = "red";
}
// 之后的td改为白色
for (var i = index + 1; i < tds.length; i++) {
tds[i].style.background = "white";
}
}
第4步:构建 HTML 结构并绑定初始化
创建包含5个星星单元格的表格,并在 body 标签的 onload 事件中调用初始化函数。
代码结构:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>动态设置style(评分效果)</title>
<!-- 在此处插入上述 JS 代码 -->
</head>
<body onload="IniEvent()">
<table id="tblRating">
<tr>
<td>☆</td>
<td>☆</td>
<td>☆</td>
<td>☆</td>
<td>☆</td>
</tr>
</table>
</body>
</html>
完成判断与注意事项
保存文件并在浏览器中打开,点击任意一颗星,确认左侧星星变红、右侧变白即为成功。此方法依赖于直接操作 DOM 样式,适合简单场景;对于复杂交互(如半星、双击复位等),建议结合 CSS 类名切换或引入现代 UI 库。
简要总结
通过以上步骤,我们实现了一个基于原生 JavaScript 的简易星级评分控件。关键在于利用索引定位用户意图,并通过 DOM 属性批量更新视觉状态。
以上就是JavaScript模拟评分控件实现方法的详细内容,更多关于JavaScript星级评分特效的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









