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

浏览器【详解】自定义事件 CustomEvent

简介

CustomEvent 是浏览器原生支持的一种事件类型,允许开发者自定义事件并在 DOM 中触发、监听,用于实现组件间通信或特定业务逻辑的解耦。

与浏览器内置事件(如 click、load)相比,CustomEvent 的核心优势是可以携带自定义数据,并能在任意 DOM 元素上触发和监听。

应用场景

  • 组件通信:在前端框架(如 Vue、React)中,非父子组件可通过自定义事件传递数据
  • 状态通知:如用户登录状态变化、数据加载完成等全局状态通知
  • 插件扩展:为自定义插件设计事件接口,允许外部监听插件内部状态变化

创建自定义事件 new CustomEvent

const myEvent = new CustomEvent(eventName, options);
  • eventName:事件名称(字符串,遵循命名规范,如 user-logindata-updated
  • options:配置对象(可选),包含:
    • detail:任意类型数据【只读】,作为事件的附加信息(最常用),要想修改,只能重新创建事件
    • bubbles:布尔值,是否冒泡(默认 false
    • cancelable:布尔值,是否可被取消(默认 false

触发(派发)事件 dispatchEvent

// 在 document 上触发自定义事件
document.dispatchEvent(myEvent);
// 在特定元素上触发
const myElement = document.getElementById('my-element');
myElement.dispatchEvent(myEvent);

监听自定义事件 addEventListener

// 监听 document 上的自定义事件
document.addEventListener('user-login', (event) => {console.log('用户登录了!', event.detail); // 访问自定义数据
});
// 监听特定元素的事件
myElement.addEventListener('data-updated', handleDataUpdate);

实战范例

// 1. 定义事件处理函数
function handleMessage(event) {console.log('收到消息:', event.detail);console.log('事件来源:', event.target);
}// 2. 监听自定义事件
document.addEventListener('custom-message', handleMessage);// 3. 创建并触发事件(可在任意位置执行)
const messageData = { content: 'Hello CustomEvent', timestamp: new Date().getTime() 
};// 创建事件,允许冒泡
const messageEvent = new CustomEvent('custom-message', {detail: messageData,bubbles: true
});// 在某个元素上触发(若 bubbles 为 true,会向上冒泡)
document.getElementById('sender').dispatchEvent(messageEvent);// 4. 移除事件监听(必要时)
// document.removeEventListener('custom-message', handleMessage);
http://www.dtcms.com/a/310090.html

相关文章:

  • AUTOSAR进阶图解==>AUTOSAR_SRS_FlashTest
  • EasyGBS的两种录像回看
  • ROS主控和stm32小车底盘通过串口进行通讯
  • 信奥骗分导论
  • 镜像快速部署ollama+python+ai
  • 光储知识积累
  • 全渠道融合:智能引擎重塑鞋服业价值链条
  • 88、【OS】【Nuttx】【启动】栈溢出保护:volatile 关键字(修饰内联汇编)
  • 15day-人工智学习-机器学习-介绍和定义
  • 【Linux】Linux下基本指令
  • 【暑期每日一题】洛谷 P9390 金盏花
  • SketchUp扩展工具分享:Ropefall v1.02插件轻松实现绳索模拟
  • 京东云轻量云服务器与腾讯云域名结合配置网站及申请SSL证书流程详解
  • 【Linux】磁盘存储+文件系统简介
  • android嵌套网页遇到的问题总结
  • mac系统自带终端崩溃修复
  • 使用自定义数据集训练 YOLOv12 以检测道路坑洞严重程度
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(上)
  • 基于Matlab的人眼虹膜识别门禁系统
  • 【Git 分支整合的艺术:岔路与归途的抉择 ——merge 与 rebase 深度解析】
  • Java函数式编程之【Stream终止操作】【下】【三】【收集操作collect()与分组分区和下游收集器】
  • 【MySQL】MySQL事务
  • 低空经济展 | 昂际智航携珑驭®系列产品亮相2025深圳eVTOL展
  • 向日葵软件提权
  • 第一篇:Linux 运维入门:虚拟机部署与基础环境配置
  • 《Java 程序设计》核心知识点梳理与深入探究
  • 工具Cursor(2)使用案例
  • 云函数编排深度解读:从概念到架构的全景指南
  • 计算声子谱
  • 详解K8s集群搭建:从环境准备到成功运行