当前位置:首页 > JavaScript

js实现星级

2026-02-01 22:24:34JavaScript

实现星级评分的基本方法

使用HTML和CSS创建星级评分的界面结构。通常用<div><span>元素表示星星,并通过CSS设置样式。

<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>
.star-rating {
  font-size: 24px;
}
.star {
  cursor: pointer;
  color: #ccc;
}
.star.active {
  color: #ffcc00;
}

JavaScript实现交互功能

通过事件监听实现鼠标悬停和点击时的星级变化效果。

const stars = document.querySelectorAll('.star');

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

  star.addEventListener('click', () => {
    const value = parseInt(star.getAttribute('data-value'));
    setRating(value);
  });
});

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

function setRating(value) {
  localStorage.setItem('rating', value);
  highlightStars(value);
}

// 初始化时检查是否有保存的评分
const savedRating = localStorage.getItem('rating');
if (savedRating) {
  highlightStars(savedRating);
}

实现半星评分

如果需要更精确的半星评分,可以使用双倍数量的星星来表示半星。

<div class="star-rating">
  <span class="star" data-value="0.5">★</span>
  <span class="star" data-value="1">★</span>
  <span class="star" data-value="1.5">★</span>
  <span class="star" data-value="2">★</span>
  <span class="star" data-value="2.5">★</span>
  <span class="star" data-value="3">★</span>
  <span class="star" data-value="3.5">★</span>
  <span class="star" data-value="4">★</span>
  <span class="star" data-value="4.5">★</span>
  <span class="star" data-value="5">★</span>
</div>

使用SVG实现自定义星星

可以使用SVG来创建更精美的星星图标,并通过CSS控制其颜色变化。

<div class="star-rating">
  <svg class="star" data-value="1" viewBox="0 0 24 24">
    <path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/>
  </svg>
  <!-- 重复其他星星 -->
</div>
.star {
  width: 24px;
  height: 24px;
  fill: #ccc;
  cursor: pointer;
}
.star.active {
  fill: #ffcc00;
}

响应式设计考虑

确保星级评分在不同设备上都能良好显示,可以使用相对单位。

.star-rating {
  font-size: clamp(16px, 4vw, 32px);
}
.star {
  margin: 0 2px;
}

无障碍访问改进

为屏幕阅读器用户添加ARIA属性,提高可访问性。

<div class="star-rating" role="radiogroup" aria-label="产品评分">
  <span class="star" data-value="1" role="radio" aria-checked="false" aria-label="1星">★</span>
  <!-- 其他星星 -->
</div>
function setRating(value) {
  stars.forEach(star => {
    const starValue = parseInt(star.getAttribute('data-value'));
    const isActive = starValue <= value;
    star.setAttribute('aria-checked', isActive);
    star.classList.toggle('active', isActive);
  });
}

js实现星级

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

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现倒计时

js实现倒计时

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

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现图片放大缩小

js实现图片放大缩小

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化…