当前位置: 首页 > news >正文

实现星星评分系统

使用HTML、CSS和JavaScript实现星星评分系统

本文将详细讲解如何使用 HTML、CSS 和 JavaScript 实现一个简单的星星评分系统。用户可以通过点击星星进行评分,并且还能够看到星星的悬浮效果和已选中状态。

1. HTML 结构

我们首先在 HTML 中定义了一个星星评分的结构,使用 <ul> 列表来包含五个星星,每颗星星通过 <li> 元素表示。每个星星都通过 data-value 属性来指定它代表的评分值(1 到 5)。

2. CSS 样式

在 CSS 中,我们对星星的样式进行了设置:

  • star-rating:这个类设置了评分容器的字体大小和显示方式,字体大小设置为 30px,以确保星星显示的足够大。
  • stars:这个类去除了默认的列表样式,使星星排列成一行。
  • star:每颗星星的基本样式。我们将星星的颜色设置为灰色,并为其添加了过渡效果,让颜色变化更加平滑。cursor: pointer 使得星星可点击。
  • star.hover 和 star.selected:这些类用于处理鼠标悬浮和点击选中的效果。当鼠标悬停或点击时,星星的颜色会变为金色。

3. JavaScript 交互逻辑

JavaScript 的核心作用是处理用户与星星评分系统的交互,包括鼠标悬浮、点击评分和更新显示状态。

  • stars.forEach():我们遍历所有的星星,并为每颗星星绑定三个事件监听器:

    1. mouseover:当鼠标悬停在星星上时,调用 updateStars 函数来更新星星的显示状态,使其呈现悬浮效果。
    2. mouseout:当鼠标移出星星时,恢复为当前评分的显示状态。
    3. click:当用户点击某颗星星时,更新当前评分,并更新星星显示状态。
  • updateStars(rating):这个函数用于根据当前评分(或悬浮的评分)更新星星的显示状态。它遍历所有星星并根据评分值添加或移除 CSS 类,从而控制星星的颜色变化。

  • submitRating():这个函数是用于将评分提交到服务器的示例代码(在实际应用中,可以根据需要修改 URL 和处理方法)。它通过 fetch 方法将评分信息发送到服务器端。

4. 页面加载时的初始化

当页面加载时,我们假设评分是默认值 0,并通过 window.onload 初始化星星的显示状态。可以根据实际情况,从本地存储或服务器加载已保存的评分,并显示对应的星星。

总结

通过以上的代码和讲解,我们可以创建一个简单且互动的星星评分系统。用户可以通过鼠标悬停和点击进行评分,同时星星的显示效果也会即时更新。这个评分系统不仅是前端开发的一个良好示例,还可以在实际的应用中扩展,用于文件上传、商品评价等场景。

代码示例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>星星评分</title><!-- 引入CSS样式 --><style>.star-rating {font-size: 30px;display: inline-block;}.stars {list-style: none;padding: 0;margin: 0;display: flex;}.star {color: #ccc;/* 默认是空心星星的颜色 */cursor: pointer;transition: color 0.2s ease;/* 加入过渡效果,使得星星的颜色变化更加平滑 */}.star.hover,.star.selected {color: gold;/* 选中的星星为金色 */}</style></head><body><!-- 星星评分容器 --><div class="star-rating"><ul class="stars"><li data-value="1" class="star">★</li><li data-value="2" class="star">★</li><li data-value="3" class="star">★</li><li data-value="4" class="star">★</li><li data-value="5" class="star">★</li></ul></div><!-- 引入JavaScript脚本 --><script>// 获取所有星星元素let stars = document.querySelectorAll('.star');let currentRating = 0; // 当前评分,初始为0// 添加鼠标悬浮效果stars.forEach(star => {// 鼠标悬浮时更新星星状态star.addEventListener('mouseover', () => {let value = parseInt(star.getAttribute('data-value')); // 获取当前星星的值updateStars(value); // 更新所有星星的显示});// 鼠标移开时恢复当前的评分状态star.addEventListener('mouseout', () => {updateStars(currentRating);});// 点击星星时更新当前评分star.addEventListener('click', () => {currentRating = parseInt(star.getAttribute('data-value')); // 更新评分值updateStars(currentRating); // 更新星星显示状态});});// 更新星星状态的函数function updateStars(rating) {stars.forEach(star => {let value = parseInt(star.getAttribute('data-value'));if (value <= rating) {// 如果星星的值小于等于评分值,设置为已选中状态star.classList.add('selected');star.classList.remove('hover');} else {// 否则,移除已选中状态star.classList.remove('selected');// 如果星星值小于等于当前悬浮位置的值,添加悬浮效果if (value <= rating) {star.classList.add('hover');} else {star.classList.remove('hover');}}});}// 提交评分到后端(示例代码)function submitRating() {fetch('/submit-rating', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({rating: currentRating // 提交当前评分}),}).then(response => response.json()).then(data => console.log('评分已提交:', data)).catch(error => console.error('提交失败:', error));}// 页面加载时,初始化评分window.onload = function() {let savedRating = 0; // 假设页面加载时默认评分为0currentRating = savedRating;updateStars(savedRating); // 初始化星星状态};</script></body>
</html>

http://www.lryc.cn/news/506500.html

相关文章:

  • 数据库建模工具 PDManer
  • 后台运维操作建议
  • NX二次开发调用内部函数设置对象穿透显示DSS_ATTR_set_show_through
  • ubuntu16.04ros-用海龟机器人仿真循线系统
  • 解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
  • HTML综合案例
  • TanStack——为现代前端开发提供高性能和灵活的工具
  • Java爬虫️ 使用Jsoup库进行API请求有什么优势?
  • React源码02 - 基础知识 React API 一览
  • COMSOL with Matlab
  • 【报表查询】.NET开源ORM框架 SqlSugar 系列
  • PostgreSQL数据库访问限制详解
  • 【test linux】创建一个ext4类型的文件系统
  • 如何在繁忙的生活中找到自己的节奏?
  • AI-PR曲线
  • Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
  • 深入解析 Elasticsearch 集群配置文件参数
  • WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)
  • 用 javascript 来回答宇宙外面是什么
  • 我的性能优化经验
  • XSLT 编辑 XML
  • 数智读书笔记系列010 生命3.0:人工智能时代 人类的进化与重生
  • Transfomer的各层矩阵
  • 代码随想录第51天
  • 基础库httpx的使用
  • c++中如何保持结构体的线程安全?3D坐标的线程安全:从理论到最优解
  • Zabbix6.0升级为6.4
  • 答题考试系统v1.6.1高级版源码分享+uniapp+搭建测试环境
  • 【Lua热更新】下篇 -- 更新中
  • 射频测试入门学习(三)——程控仪器是怎样和电脑连接通信的