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

前端如何实现一个五星评价,鼠标滑动,前边星星颜色的变黄,后边的不变;

直接上代码

<!DOCTYPE html>
<html>
<head>
<style>
.star-rating {
  display: flex;
  padding: 10px 0;
}

.star {
  position: relative;
  width: 40px;
  height: 40px;
}

.half {
  position: absolute;
  top: 0;
  width: 20px;
  height: 40px;
  overflow: hidden;
  font-size: 40px;
  color: #e0e0e0;
  cursor: pointer;
  transition: color 0.2s;
}

.half.left {
  left: 0;
}

.half.right {
  right: 0;
}

.half.left::before,
.half.right::before {
  position: absolute;
  content: '★';
  width: 40px;
}

.half.left::before {
  left: 0;
}

.half.right::before {
  right: 0;
}
</style>
</head>
<body>
<div class="star-rating">
  <div class="star">
    <span class="half left" data-score="0.5"></span>
    <span class="half right" data-score="1.0"></span>
  </div>
  <div class="star">
    <span class="half left" data-score="1.5"></span>
    <span class="half right" data-score="2.0"></span>
  </div>
  <div class="star">
    <span class="half left" data-score="2.5"></span>
    <span class="half right" data-score="3.0"></span>
  </div>
  <div class="star">
    <span class="half left" data-score="3.5"></span>
    <span class="half right" data-score="4.0"></span>
  </div>
  <div class="star">
    <span class="half left" data-score="4.5"></span>
    <span class="half right" data-score="5.0"></span>
  </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', () => {
  const starRating = document.querySelector('.star-rating');
  const halves = document.querySelectorAll('.half');

  starRating.addEventListener('mousemove', (e) => {
    const target = e.target.closest('.half');
    if (!target) return;
    
    const score = parseFloat(target.dataset.score);
    halves.forEach(half => {
      const halfScore = parseFloat(half.dataset.score);
      half.style.color = halfScore <= score ? '#ffd700' : '#e0e0e0';
    });
  });

  starRating.addEventListener('mouseleave', () => {
    halves.forEach(half => {
      half.style.color = '#e0e0e0';
    });
  });
});
</script>
</body>
</html>

效果:

相关文章:

  • java后端开发day16--字符串(二)
  • 25/2/17 <嵌入式笔记> 桌宠代码解析
  • VisionMaster4.4 python脚本 图像处理 转换函数 爱之初体验
  • recent移除task时,结束其所有进程和service(全Android版本)
  • 日常开发中,使用JSON.stringify来实现深拷贝的坑
  • PHP支付宝--转账到支付宝账户
  • 计算机专业知识【探秘 C/S 工作模式:原理、应用与网络协议案例】
  • NBT群落物种级丰度鉴定新方法sylph
  • 【C语言】有序数组的平方
  • 《DeepSeek 一站式工作生活 AI 助手》
  • 外包干了3年,技术退步太明显了。。。。。
  • Rust 语言入门(一):打印与格式化输出
  • Transformer 模型介绍(四)——编码器 Encoder 和解码器 Decoder
  • DeepSeek应用-一秒对书本要点分析并创建思维脑图
  • Java并发编程——AQS原理解析
  • MobaXterm中文版安装使用教程-附安装包
  • 使用 Spring Boot 和 Canal 实现 MySQL 数据库同步
  • 1997-2019年各省进出口总额数据
  • Android 中使用 FFmpeg 进行音视频处理
  • Spring Boot三:Springboot自动装配原理
  • 视频丨江苏南通局地降雨量超100毫米,多地积水内涝
  • 一稻济天下,肝胆两昆仑!今天,缅怀袁隆平、吴孟超
  • “创”出新活力、“闯”出新优势,从三个关键词看民企科技创新
  • 红星控股:车建兴已授权其配偶作为代理人,将全力以赴配合推进重整程序
  • 体坛联播|王楚钦晋级男单16强,德布劳内曼城主场谢幕
  • 北师大发布《短视频家长指南》,回应短视频时代家庭教育挑战