当一个事件发生时,分为三个阶段:
- 捕获阶段 从根节点开始顺序而下,检测每个节点是否注册了事件处理程序。如果注册了事件处理程序,并且 useCapture 为 true,则调用该事件处理程序。(IE 中无此阶段。)
- 目标阶段 触发在目标对象本身注册的事件处理程序,也称正常事件派发阶段 。
- 冒泡阶段 从目标节点到根节点,检测每个节点是否注册了事件处理程序,如果注册了事件处理程序,并且 useCapture 为 false,则调用该事件处理程序。
js的事件流机制类似与flex的事件流机制,流程图如下:
addEventListener方法的第三个参数就是用来控制事件是执行 捕获阶段 还是 冒泡阶段。以下是示例代码,不支持ie。