JS基础知识–事件,事件流,事件模型

JavaScript 中的事件模型是一种用于处理用户交互和其他类型事件的机制。它允许开发人员对特定事件做出响应,并执行相应的代码。

事件

JavaScript 的事件模型基于事件驱动编程的概念,它包括以下主要组成部分:

  1. 事件目标(Event Target) :事件目标是触发事件的对象,它可以是文档、窗口、HTML 元素或其他 JavaScript 对象。每个事件目标都可以监听和触发事件。
  2. 事件监听器(Event Listener) :事件监听器是一个函数,用于定义事件发生时要执行的代码。通过将事件监听器附加到事件目标上,可以告诉 JavaScript 在事件发生时调用特定的函数。
  3. 事件类型(Event Type) :事件类型是一种特定的事件,例如点击事件(click)、键盘按下事件(keydown)、鼠标移动事件(mousemove)等。每个事件类型都有其特定的属性和行为。
  4. 事件处理程序(Event Handler) :事件处理程序是一个函数,它被分配给特定事件类型的监听器。当事件发生时,事件处理程序会被调用,并执行相关的代码。
  5. 事件对象(Event Object) :事件对象是一个包含有关事件的信息的对象。它提供了与事件相关的属性和方法,可以用于获取事件的详细信息,如事件目标、事件类型、鼠标位置等。

事件模型的基本流程如下:

  1. 选择要监听事件的目标对象。
  2. 定义事件监听器或事件处理程序函数。
  3. 将事件监听器附加到目标对象的特定事件类型上。
  4. 当事件发生时,事件目标将触发相应的事件,并调用相应的事件处理程序函数。
  5. 在事件处理程序函数中执行所需的操作。

JavaScript 提供了多种方式来操作事件模型,包括使用原生的 addEventListener 方法来添加事件监听器、使用内联事件处理程序、使用事件委托等。

事件流

由于 DOM 是一个树结构,如果在父子节点绑定事件时候,当触发子节点的时候,就存在一个顺序问题,这就涉及到了事件流的概念。

所谓事件流,Event Flow,是指描述事件在 DOM 树中传播和触发的顺序。当事件发生时,它会在 DOM 树的不同节点间传播,最终触发相应的事件处理程序。

事件流有两种主要的模型:

  1. 冒泡(Bubbling):在冒泡模型中,事件首先在触发事件的元素上触发,然后沿着 DOM 树向上冒泡,依次触发父元素的相同事件。换句话说,事件开始时在最具体的元素上触发,然后逐步向上触发,直到到达最顶层的祖先元素。这是默认的事件流模型,也是最常用的模型。
  2. 捕获(Capturing):在捕获模型中,事件从最顶层的祖先元素开始,沿着 DOM 树向下传播,直到达到触发事件的元素。然后,事件在触发元素上触发,最后不再继续传播。捕获模型在实际开发中较少使用,但可以使用 addEventListener 方法的第三个参数设置为 true 来启用捕获阶段。

事件流都会经历三个阶段:

  • 事件捕获阶段(capture phase)
  • 处于目标阶段(target phase)
  • 事件冒泡阶段(bubbling phase)

addEventListener方法中,可以使用第三个参数来区分捕获阶段和冒泡阶段。该参数称为useCapture,它是一个布尔值,默认为false冒泡阶段)。

JS基础知识--事件,事件流,事件模型

如果将useCapture设置为true,则事件将在捕获阶段进行处理。

JS基础知识--事件,事件流,事件模型

事件模型

事件模型可以分为三种:

  • 原始事件模型(DOM0级)
  • 标准事件模型(DOM2级)
  • IE事件模型(基本不用)

原始事件模型

事件绑定监听函数比较简单, 有两种方式:

  • HTML代码中直接绑定
JS基础知识--事件,事件流,事件模型
  • 通过JS代码绑定
JS基础知识--事件,事件流,事件模型

特性

  • 绑定速度快,DOM0 级事件具有很好的跨浏览器优势,会以最快的速度绑定,但由于绑定速度太快,可能页面还未完全加载出来,以至于事件可能无法正常运行。
  • 只支持冒泡,不支持捕获
  • 同一个类型的事件只能绑定一次。当希望为同一个元素绑定多个同类型事件的时候,是不被允许的,后绑定的事件会覆盖之前的事件。

删除 DOM0 级事件处理程序只要将对应事件属性置为null即可。

标准事件模型

在该事件模型中,一次事件共有三个过程,也就是上文提到的事件流 3 阶段,

  • 事件捕获阶段:事件从 Document 一直向下传播到目标元素, 依次检查经过的节点是否绑定了事件监听函数,如果有则执行
  • 事件处理阶段:事件到达目标元素, 触发目标元素的监听函数
  • 事件冒泡阶段:事件从目标元素冒泡到 Document,依次检查经过的节点是否绑定了事件监听函数,如果有则执行

事件绑定监听函数的方式如下:

JS基础知识--事件,事件流,事件模型

事件移除监听函数的方式如下:

JS基础知识--事件,事件流,事件模型

举个栗子

JS基础知识--事件,事件流,事件模型

IE事件模型

IE事件模型共有两个过程:

  • 事件处理阶段:事件到达目标元素, 触发目标元素的监听函数。
  • 事件冒泡阶段:事件从目标元素冒泡到document, 依次检查经过的节点是否绑定了事件监听函数,如果有则执行


原文始发于微信公众号(前端一起学):JS基础知识–事件,事件流,事件模型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/191224.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!