&l…">
当前位置:首页 > JavaScript

js实现评分

2026-03-01 04:19:52JavaScript

实现评分功能的基本方法

在JavaScript中实现评分功能通常涉及创建交互式星级评分组件。以下是常见的实现方式:

HTML结构

<div class="rating">
  <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>
<p>当前评分: <span id="rating-value">0</span></p>

CSS样式

.star {
  font-size: 24px;
  color: #ccc;
  cursor: pointer;
  transition: color 0.2s;
}

.star.active {
  color: #ffcc00;
}

JavaScript逻辑

const stars = document.querySelectorAll('.star');
const ratingValue = document.getElementById('rating-value');

stars.forEach(star => {
  star.addEventListener('click', () => {
    const value = parseInt(star.getAttribute('data-value'));
    ratingValue.textContent = value;

    stars.forEach(s => {
      s.classList.toggle('active', 
        parseInt(s.getAttribute('data-value')) <= value
      );
    });
  });
});

支持鼠标悬停效果的实现

增强用户体验可以添加鼠标悬停预览功能:

let currentHover = 0;

stars.forEach(star => {
  star.addEventListener('mouseover', () => {
    currentHover = parseInt(star.getAttribute('data-value'));
    updateStars();
  });

  star.addEventListener('mouseout', () => {
    currentHover = 0;
    updateStars();
  });
});

function updateStars() {
  const currentRating = parseInt(ratingValue.textContent);
  stars.forEach(star => {
    const value = parseInt(star.getAttribute('data-value'));
    star.classList.toggle('active', 
      value <= (currentHover || currentRating)
    );
  });
}

表单集成方法

如需将评分结果提交到表单:

<form id="rating-form">
  <input type="hidden" name="rating" id="rating-input" value="0">
  <!-- 其他表单字段 -->
  <button type="submit">提交评分</button>
</form>
document.getElementById('rating-form').addEventListener('submit', (e) => {
  document.getElementById('rating-input').value = 
    document.getElementById('rating-value').textContent;
});

使用第三方库的简化方案

对于更复杂的评分需求,可以考虑使用现有库:

  • RateYo: 轻量级jQuery插件
  • Starability.css: 纯CSS解决方案
  • Rater.js: 纯JavaScript库

安装RateYo示例:

npm install rateyo

使用示例:

import $ from 'jquery';
import 'rateyo/src/jquery.rateyo';

$("#rating").rateYo({
  rating: 3.6,
  halfStar: true,
  onChange: function(rating) {
    $("#rating-value").text(rating);
  }
});

无障碍访问优化

确保评分组件对屏幕阅读器友好:

<div class="rating" role="radiogroup" aria-labelledby="rating-label">
  <span id="rating-label">请评分</span>
  <span class="star" role="radio" aria-checked="false" data-value="1">★</span>
  <!-- 其他星星 -->
</div>
stars.forEach(star => {
  star.addEventListener('click', () => {
    stars.forEach(s => {
      s.setAttribute('aria-checked', 
        s === star || parseInt(s.getAttribute('data-value')) < 
        parseInt(star.getAttribute('data-value'))
      );
    });
  });
});

这些实现方案覆盖了从基础到高级的评分功能需求,可根据具体项目要求选择合适的实现方式。

js实现评分

标签: 评分js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

vue实现星星评分

vue实现星星评分

vue实现星星评分的方法 使用组件实现星星评分 创建一个可复用的星星评分组件,通过v-for循环渲染星星图标,利用动态绑定类名实现选中和未选中状态。 <template> <…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEv…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…