JavaScript中的事件模型

163 阅读2分钟

一.事件与事件流

1.事件

  • 是指用户在某事务上由于某种行为所执行的操作(针对页面元素的操作)
  • 事件是文档或浏览器窗口中发生的特定的交互瞬间
(1).事件三要素
  • 事件源:是指在那个元素上发生的操作(比如a标签、div标签)
  • 事件:指执行的操作(比如单击、双击)
  • 事件驱动程序(事件处理程序):发生这个操作后执行的操作

2.事件流

  • DOM是一个树结构,如果在父子节点绑定事件,且当子节点触发事件的时候就存在一个顺序问题,就涉及到了事件流的概念。
(1).事件的三个阶段

事件的三个阶段

  • 事件的捕获阶段:事件从上往下传递(不具体到具体)
  • 事件的目标阶段:事件找到目标元素
  • 事件的冒泡阶段:事件从下往上传递(具体到不具体)

二.事件模型

事件模型

1.三种事件模型

  • 原始事件模型(DOM0级 - onclick)
  • 标准事件模型(DOM2级 - addEventListener)
  • IE事件模型(基本不用 - attachEvent)
(1).原始事件模型

特性

  • 原始事件模型具有很好的跨浏览器优势,会以最快的速度绑定,但是由于绑定速度太快可能页面还未加载出来,以至于事件可能无法正常运行
  • 只支持冒泡,不支持捕获
  • 同一类型的事件只能绑定一个 注意
  • 原始事件模型只能绑定一个,如果多个事件处理程序,后一个会覆盖前一个
(2).标准事件模型

该事件模型中,一次性事件共有三个过程

  • 事件捕获 事件处理 事件冒泡
    如何绑定
  • DOM.addEventListener(eventType, handle, useCapture)
    如何移除
  • DOM.removeEventListener(eventType, handle, useCapture)
    参数
  • eventType:事件类型
  • handle:事件处理程序
  • useCapture:是否在捕获阶段进行处理,一般设置为false与IE浏览器保持一致
    特性
  • 可以在一个DOM元素上绑定多个事件处理程序,而且各不冲突
  • 执行时机:第三个参数(useCapture)为true时在捕获过程中执行,否则在冒泡或称中执行处理函数
    eventPhase
    事件对象有一个eventPhase属性,返回一个代表当前执行阶段的整数值。
  • 1:捕获阶段
  • 2:事件对象触发阶段
  • 3:冒泡阶段