当前位置:首页 > JavaScript

js实现星级

2026-03-14 21:44:19JavaScript

实现星级评分的JavaScript方法

使用纯JavaScript实现星级评分功能,可以通过DOM操作和事件监听完成。以下是一个基础实现示例:

HTML结构

<div class="star-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样式

js实现星级

.star {
  font-size: 24px;
  color: #ccc;
  cursor: pointer;
}
.star.active {
  color: gold;
}

JavaScript逻辑

document.addEventListener('DOMContentLoaded', function() {
  const stars = document.querySelectorAll('.star');
  const ratingValue = document.getElementById('rating-value');
  let currentRating = 0;

  stars.forEach(star => {
    star.addEventListener('mouseover', function() {
      const value = parseInt(this.getAttribute('data-value'));
      highlightStars(value);
    });

    star.addEventListener('mouseout', function() {
      highlightStars(currentRating);
    });

    star.addEventListener('click', function() {
      currentRating = parseInt(this.getAttribute('data-value'));
      ratingValue.textContent = currentRating;
      highlightStars(currentRating);
    });
  });

  function highlightStars(value) {
    stars.forEach(star => {
      const starValue = parseInt(star.getAttribute('data-value'));
      star.classList.toggle('active', starValue <= value);
    });
  }
});

使用Font Awesome图标的增强版

如需使用Font Awesome图标替代Unicode星星,可修改HTML部分:

js实现星级

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">

<div class="star-rating">
  <i class="far fa-star" data-value="1"></i>
  <i class="far fa-star" data-value="2"></i>
  <i class="far fa-star" data-value="3"></i>
  <i class="far fa-star" data-value="4"></i>
  <i class="far fa-star" data-value="5"></i>
</div>

相应修改CSS中的选择器:

.fa-star {
  font-size: 24px;
  color: #ccc;
  cursor: pointer;
}
.fa-star.active {
  color: gold;
}

实现半星评分功能

要实现半星评分效果,可以使用双倍数量的星星并调整显示逻辑:

// 修改highlightStars函数
function highlightStars(value) {
  const fullStars = Math.floor(value);
  const hasHalfStar = value % 1 >= 0.5;

  stars.forEach(star => {
    const starValue = parseInt(star.getAttribute('data-value'));
    star.classList.remove('fas', 'far', 'active');

    if (starValue <= fullStars) {
      star.classList.add('fas', 'active');
    } else if (starValue === fullStars + 1 && hasHalfStar) {
      star.classList.add('fas', 'fa-star-half-alt', 'active');
    } else {
      star.classList.add('far');
    }
  });
}

注意事项

  1. 确保DOM加载完成后再执行JavaScript代码
  2. 考虑添加触摸事件支持以适应移动设备
  3. 可以扩展功能将评分结果通过AJAX提交到服务器
  4. 对于可访问性,应添加适当的ARIA属性

以上实现可以根据具体需求进行调整和扩展,如改变星星颜色、大小或添加动画效果等。

标签: 星级js
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现轮播

js实现轮播

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

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…