使用TypeScript实现一个浏览器事件的集中管理

news/2025/2/19 9:11:22/

使用TypeScript实现一个浏览器事件的集中管理

        • 1. 浏览器事件模型
        • 2. EventTarget接口
        • 3.使用TypeScript实现浏览器事件的集中管理

1. 浏览器事件模型

浏览器的事件模型是一种基于事件驱动的编程模型,用于处理用户与浏览器交互时触发的各种事件。它包括三个主要阶段:

  1. 捕获阶段:事件从文档根节点开始向下传递,直到到达目标元素之前的节点。在捕获阶段中,事件处理程序可以通过调用 event.stopPropagation() 方法来停止事件的传播。
  2. 目标阶段:事件到达目标元素,触发目标元素上绑定的事件处理程序。在目标阶段中,事件处理程序可以通过调用 event.preventDefault() 方法来阻止默认行为。
  3. 冒泡阶段:事件从目标元素开始向上冒泡,直到到达文档根节点。在冒泡阶段中,事件处理程序可以通过调用 event.stopPropagation() 方法来停止事件的传播。

浏览器事件模型的主要优点是它可以使开发人员更加灵活地处理用户交互,并且可以通过事件委托等技术来提高性能。

2. EventTarget接口

DOM节点的事件操作(监听和触发),都定义在EventTarget接口。所有节点对象都部署了这个接口

该接口主要提供了三个实例方法

  • addEventListener():绑定事件的监听函数
  • removeEventListener:移除事件的监听函数
  • dispatchEvent():触发事件

3.使用TypeScript实现浏览器事件的集中管理

class EventManager {private listeners: Map<string, Set<Function>>;constructor() {this.listeners = new Map();}public addEventListener(eventName: string, listener: Function): void {if (!this.listeners.has(eventName)) {this.listeners.set(eventName, new Set());}this.listeners.get(eventName)?.add(listener);}public removeEventListener(eventName: string, listener: Function): void {if (this.listeners.has(eventName)) {this.listeners.get(eventName)?.delete(listener);}}public dispatchEvent(eventName: string, eventArgs?: any): void {if (this.listeners.has(eventName)) {const listeners = this.listeners.get(eventName);listeners?.forEach((listener) => {listener(eventArgs);});}}
}

在这个示例中,我们定义了一个 EventManager 类,它具有三个方法:

  • addEventListener(eventName: string, listener: Function): void:用于注册一个事件监听器。
  • removeEventListener(eventName: string, listener: Function): void:用于移除一个事件监听器。
  • dispatchEvent(eventName: string, eventArgs?: any): void:用于触发一个事件,并传递任何相关参数。

我们可以通过实例化 EventManager 类来创建一个事件管理器,并使用它来注册、移除和触发事件。例如:

const eventManager = new EventManager();// 注册一个事件监听器
eventManager.addEventListener('click', (event) => {console.log(`Clicked at (${event.clientX}, ${event.clientY})`);
});// 触发一个事件
eventManager.dispatchEvent('click', { clientX: 100, clientY: 200 });// 移除一个事件监听器
eventManager.removeEventListener('click', listener);

http://www.ppmy.cn/news/264973.html

相关文章

【云原生网关】Apache ShenYu 使用详解

目录 一、前言 二、Apache ShenYu 介绍 2.1 为什么叫ShenYu 2.2 ShenYu特点 2.3 ShenYu架构图 2.4 shenyu数据同步原理 2.4.1 Zookeeper数据同步原理 三、Apache ShenYu 安装部署 3.1 部署流程 3.1.1 创建 Docker Network 3.1.2 拉取Apache ShenYu Admin镜像 3.1.3…

车机导航流程

整体架构 1 导航应用作为导航状态管理和导航数据管理&#xff0c;将状态和导航数据通过framework将数据发送给驱动 2 驱动通过SPI将数据发送到MCU&#xff0c;MCU转发给仪表 3 仪表解析数据对导航状态、导航数据进行显示 导航流程 1 在结束导航时一定要清除发送buffer&#x…

御用导航提示提醒_AR实景导航,让你安全驾驶,不再“绕弯”

虽然现在手机、车机的导航能力越来越强&#xff0c;但是当我们遇到不熟悉的路况&#xff0c;特别是在立交桥和高速匝道口时还是会出拐错弯或错过路口的情况&#xff0c;而 往往错过了一个出口&#xff0c;就意味着你要多跑 几公里甚至更远&#xff01; &#xff01; 基于当前复…

GPS北斗定位模块对车辆导航的意义

如今是私家车横行的时代&#xff0c;多到每天都要面临堵车&#xff0c;如何在车流中快速行驶&#xff0c;需要一个智能的导航系统&#xff0c;提示驾驶员们哪条道路上行驶了多少车辆&#xff0c;来辅助安全驾驶&#xff0c;了解周边交通情况。 这样的一套导航系统背后包含了无…

计算机专业孙玉辉,面向自主驾驶的智能车辆导航平台技术研究

摘要&#xff1a; 智能交通系统(Intelligent Transport System,ITS)可以显著提高交通效率,增强车辆运行安全性,减少能源耗费与尾气排放,是现代交通运输系统的重要发展方向.智能车辆(Intelligent Vehicle,IV)是ITS的核心和主要组成部分,是实现ITS人—车—路一体化的关键技术,其研…

车rc陀螺仪测试软件,车辆运动测量-加速度计和陀螺仪的介绍

车辆运动测量-加速度计和陀螺仪的介绍 有运动加速度时&#xff0c;歪斜传感器将得到一个不精确的倾角。也就是说&#xff0c;在车辆歪斜时只经过加速度计将无法得到精确的倾角。经过丈量绕车辆重心的旋转&#xff0c;陀螺仪有助于纠正车俩向前歪斜带来的晦气影响。不幸的是&…

matlab 零速检测,一种基于车辆零速检测的惯性导航误差修正方法与流程

本发明涉及车载导航与定位领域,尤其是涉及一种基于车辆零速检测的惯性导航误差修正方法。 背景技术: 惯性导航系统(inertialnavigationsystem,ins)能根据惯性传感器(陀螺仪、加速度计)提供的载体相对于惯性空间的线速度和角速度信息,成为车载组合定位系统关键部件。惯性导航…

惯性导航基本概念

1 惯性导航系统 1.1 定义 惯性导航系统&#xff08;INS &#xff09;惯性导航系统是以陀螺和加速度计为敏感器件的导航参数解算系统&#xff0c;该系统根据陀螺的输出建立导航坐标系&#xff0c;根据加速度计输出解算出运载体在导航坐标系中的速度和位置。 惯性导航系统是一…