一.事件与事件流
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:冒泡阶段