带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(2)

简介: 带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(2)

带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(1)https://developer.aliyun.com/article/1349641?groupCode=tech_library


2. 事件流的属性

事件流涉及到三个主要的概念:事件捕获阶段、目标阶段和事件冒泡阶段。了解这些阶段和相关的属性对于理解事件流的机制至关重要。

 

1) 事件捕获阶段

 

事件捕获阶段是事件流的第一个阶段,从根节点开始向下传播到目标元素。在事件捕获阶段中,事件依次经过每个父元素,直到达到目标元素。

 

在事件捕获阶段,可以使用addEventListener的第三个参数指定事件处理程序在捕获阶段中执行。

 

element.addEventListener('click', handler, true);

 

2) 目标阶段

 

目标阶段是事件流的第二个阶段,事件到达目标元素后被触发执行事件处理程序。

 

3) 事件冒泡阶段

 

事件冒泡阶段是事件流的最后一个阶段,事件从目标元素开始向上冒泡,依次经过每个父元素,直到达到根节点。

 

在事件冒泡阶段,可以使用addEventListener的第三个参数设置为false或省略来指定事件处理程序在冒泡阶段中执行(默认值)。

 

element.addEventListener('click', handler, false);// 或
element.addEventListener('click', handler);

 

4) 事件对象

 

在事件处理程序中,可以通过事件对象访问和操作相关的事件信息。事件对象提供了一些属性和方法,可以获取事件的类型、目标元素、鼠标坐标等信息。

 

例如,可以通过事件对象的type属性获取事件类型:

 

element.addEventListener('click', function(event) {
  console.log(event.type); // 输出 'click'});

3. 事件流的应用场景

事件流在前端开发中具有广泛的应用场景,下面介绍几个常见的应用场景:

 

1)事件处理

 

事件流提供了一种机制,用于处理和响应用户的交互操作。通过在目标元素上注册事件处理程序,可以捕获和处理用户触发的事件,实现交互功能。

 

例如,通过在按钮上注册click事件处理程序,可以在按钮被点击时执行相应的代码逻辑。

 

const button = document.getElementById('myButton');
button.addEventListener('click', function(event) {
  console.log('按钮被点击');});

2 事件代理

 

事件代理(Event Delegation)是一种常见的优化技术,用于处理大量具有相似行为的子元素事件。通过在父元素上注册事件处理程序,可以利用事件冒泡机制,统一管理子元素的事件处理。

 

例如,可以在父元素上注册click事件处理程序,根据触发事件的具体子元素进行不同的操作。

 

const list = document.getElementById('myList');
list.addEventListener('click', function(event) {
  if (event.target.tagName === 'LI') {
    console.log('项目被点击');
  }});

 

3 事件委托

 

事件委托是一种通过将事件处理委托给父元素来提高性能和简化代码的技术。它利用事件冒泡机制,在父元素上注册一个事件处理程序,处理多个子元素的相同事件。

 

例如,可以在父元素上注册click事件处理程序,根据触发事件的子元素的不同类别执行不同的操作。

const container = document.getElementById('myContainer');
container.addEventListener('click', function(event) {
  if (event.target.classList.contains('button')) {
    console.log('按钮被点击');
  } else if (event.target.classList.contains('link')) {
    console.log('链接被点击');
  }});

 

带你读《现代Javascript高级教程》八、JavaScript事件流:深入理解事件处理和传播机制(3)https://developer.aliyun.com/article/1349639?groupCode=tech_library

相关文章
|
2月前
|
JavaScript 前端开发
js事件队列
js事件队列
|
25天前
|
JavaScript 前端开发
JavaScript 事件
JavaScript 事件
29 2
|
2月前
|
JavaScript 前端开发
JavaScript 事件流
JavaScript 事件流
26 1
|
2月前
|
JavaScript 前端开发
javascript中常用的事件
这篇文章列出并演示了JavaScript中常用的DOM事件,包括失去焦点、获得焦点、鼠标点击、键盘事件等,并展示了如何通过直接在HTML标签中使用事件句柄和通过JavaScript为元素添加事件监听器两种方式来注册事件。
|
2月前
|
JavaScript 前端开发
JavaScript 事件的绑定
JavaScript 事件的绑定
32 0
|
7天前
|
JavaScript 前端开发
JavaScript HTML DOM 事件
JavaScript HTML DOM 事件
14 5
|
7天前
|
监控 JavaScript 前端开发
|
24天前
Nest.js 实战 (十二):优雅地使用事件发布/订阅模块 Event Emitter
这篇文章介绍了在Nest.js构建应用时,如何通过事件/发布-订阅模式使应用程序更健壮、灵活、易于扩展,并简化服务间通信。文章主要围绕@nestjs/event-emitter模块展开,这是一个基于eventemitter2库的社区模块,提供了事件发布/订阅功能,使得实现事件驱动架构变得简单。文章还介绍了如何使用该模块,包括安装依赖、初始化模块、注册EventEmitterModule、使用装饰器简化监听等。最后总结,集成@nestjs/event-emitter模块可以提升应用程序的事件驱动能力,构建出更为松耦合、易扩展且高度灵活的系统架构,是构建现代、响应迅速且具有高度解耦特性的Nest.
|
2月前
|
JavaScript NoSQL 前端开发
|
2月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
58 1