JavaScript评分组件滑动采用事件委托,核心是监听父容器的mousedown和mousemove事件,通过data-dragging状态控制拖拽流程,利用event.target动态识别星星并更新评分与视觉反馈。

JavaScript 中用事件委托实现评分组件的滑动,核心是监听父容器的 mousemove(配合 mousedown)事件,而非为每个星星单独绑定事件。这样既节省内存,又天然支持动态增删星星。
1. 结构准备:用语义化 HTML 搭建评分容器
确保所有可点击/滑动的星星都包裹在一个共同父元素中,并标记唯一标识:
<div class="rating" data-rating="0"> <span class="star" data-value="1">★</span> <span class="star" data-value="2">★</span> <span class="star" data-value="3">★</span> <span class="star" data-value="4">★</span> <span class="star" data-value="5">★</span> </div>
2. 启用滑动状态:监听 mousedown 并标记拖拽中
只在鼠标按下时开启“滑动模式”,避免误触发;用布尔变量或 dataset 控制状态:
- 给
.rating绑定mousedown,设置data-dragging="true" - 同时监听
mouseup和mouseleave清除该状态(防止拖出区域后松手失效) - 注意:需调用
event.preventDefault()防止文字选中干扰
3. 事件委托处理滑动:mousemove + 事件冒泡定位星星
在父容器上监听 mousemove,利用 event.target 判断是否进入某颗星星,并实时更新评分:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 检查
event.target.classList.contains('star')确保点中的是星星 - 读取
event.target.dataset.value获取对应分值 - 仅当
data-dragging === "true"时才执行高亮和赋值逻辑 - 为防快速滑过导致漏帧,可对当前值做防抖判断(如:只在值变化时更新)
4. 视觉反馈与数据同步
滑动过程中需即时视觉响应,同时保持数据准确:
- 移除所有
.star的临时高亮类(如active),再为 ≤ 当前值的星星添加 - 更新父容器的
data-rating,也可同步写入隐藏 input 或触发自定义事件供外部使用 - 推荐在
mouseup后再触发最终提交逻辑(如保存、发请求),避免滑动中途误提交
不复杂但容易忽略:移动端需额外兼容 touchstart/touchmove/touchend,且要用 event.touches[0] 取坐标;若要支持精确悬停(非拖拽)评分,可分离 mouseenter 逻辑,但滑动场景下以按住移动为主。

















