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

效果:

http://www.dtcms.com/a/23175.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自动装配原理
  • Java中Map循环安全的删除数据的4中方法
  • Qt5开发入门指南:从零开始掌握跨平台开发
  • ZYNQ TCP Server PS端千兆网口速率低问题,要修改BSP中LWIP配置参数
  • 英语---基础词汇库
  • Nginx 负载均衡实战:构建高效稳定的 Web 服务
  • 【C#零基础从入门到精通】(二十六)——C#三大特征-多态详解
  • 腾讯的webUI怎样实现deepseek外部调用 ; 腾讯云通过API怎样调用deepseek
  • 解密全同态加密中的自举(Bootstrapping)
  • 【PCIe 总线及设备入门学习专栏 1.1 -- PCI 设备访问方法】
  • JUC并发—5.AQS源码分析一