自定义元素怎么实现评分星星的交互评分组件

星婷君_6420

星婷君_6420

2026-08-16

173人浏览

原创

自定义元素实现评分星星组件需继承htmlelement,通过observedattributes监听value/max/readonly属性,在attributechangedcallback中更新状态;shadow dom封装结构与样式,支持半星、hover预览、只读模式及aria可访问性,并提供value setter/getter与change事件。

自定义元素怎么实现评分星星的交互评分组件

自定义元素(Custom Element)实现评分星星组件,核心是用 class 继承 HTMLElement,封装渲染、点击、hover 逻辑,并通过属性(如 value、max、readonly)控制状态,同时用 Shadow DOM 隔离样式与结构。

定义基础结构和属性绑定

创建一个继承 HTMLElement 的类,声明 observedAttributes 指定需响应的属性(如 value、max、readonly),并在 attributeChangedCallback 中同步更新内部状态。Shadow DOM 内用 SVG 或 Unicode ★/☆ 渲染星星,每颗星绑定 click 和 mousemove 事件。

  • 用 attachShadow({ mode: 'closed' }) 封装样式与结构,避免外部干扰
  • 默认 max="5",value 支持小数(如 3.7),需支持半星显示
  • 通过 getAttribute('value') 初始化值,转换为数字并校验范围

实现交互逻辑:点击选中 + 悬停预览

点击某颗星时,计算当前星序号(从 1 开始),结合是否启用半星,设置新 value;悬停时临时高亮,离开后恢复原值。关键点在于区分「操作态」和「展示态」——只在非只读时响应交互。

HTML Extract
HTML Extract

使用 MinerU 从 HTML 页面和文件中提取内容,将 HTML 转换为保持标题、列表、表格及文本层次结构的干净、结构化 Markdown。F...

下载
  • 监听 click 事件,在事件委托中获取目标星的 data-index,计算 value = index - 0.5(半星)或 index(整星)
  • mousemove 时根据鼠标位置动态判断 hover 值(例如:clientX 相对于星星容器的水平比例)
  • 只读模式下移除所有交互事件监听器,CSS 设为 pointer-events: none

支持双向数据绑定与事件通知

组件应像原生表单控件一样,能响应外部赋值(如 el.value = 4)并派发自定义事件(如 change、input),便于集成到框架或表单中。

  • 定义 getter/setter:get value() 返回当前评分,set value(v) 校验并触发重绘与事件
  • 用户操作后派发 new CustomEvent('change', { detail: { value } }),支持冒泡
  • 提供 reset() 方法,恢复初始值(可选)

样式隔离与可访问性增强

Shadow DOM 内嵌 CSS 确保样式不泄漏,同时添加 role="slider"、aria-valuenow、aria-valuemin/max 等属性,让屏幕阅读器可识别。

  • 每颗星用 <button type="button"></button> 包裹,确保键盘可聚焦(Tab)、空格/回车触发
  • 用 tabindex="-1" 控制焦点顺序,禁用原生按钮默认样式但保留语义
  • 提供 CSS 自定义属性(如 --star-color、--star-size)方便主题定制

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

html

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2123

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4543

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5690

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5138

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

723

5

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

3571

6

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

2024.03.06

5888

6

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

2025.12.30

754

19

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

2025.12.30

634

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 209人学习