当前位置:首页 > 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样式

.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部分:

<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;
}

实现半星评分功能

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

js实现星级

// 修改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实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…