事件流 + 事件模型

Posted by CodingWithAlice on July 1, 2021

事件流 + 事件模型

一、事件流

  • 事件冒泡:从下往上的传播方式 - 事件最开始由最具体的元素然后逐渐向上传播到DOM中最高层的父节点 window -> document -> html -> body -> …
  • 事件捕获:与事件冒泡相反,事件最开始由不太具体的节点最早接受事件, 而最具体的节点最后接受事件

img

二、事件模型

通过监听函数对事件作出反应 — 事件驱动式编程模型 - 推荐使用 addEventListener

  • 现代事件模型(Event Delegation)
    • 过程:事件委托是一种现代的事件处理技术,它利用事件冒泡的特性,将 事件处理程序添加到父元素上,而不是为每个子元素单独添加事件处理程序
    • 绑定方法:parentElement.addEventListener('click', handleClick);
  • DOM2 级事件模型【W3C标准模型】

    • 过程(3个):捕获 + 处理 + 冒泡
      • 事件捕获阶段 :事件从document一直 向下传播 到目标元素, 依次检查经过的节点是否绑定了事件监听函数,如果有则执行
      • 事件处理阶段:到达目标元素,触发目标元素的监听函数
      • 事件冒泡阶段:事件从目标元素冒泡到document,依次检查经过的节点是否绑定了事件监听函数,如果有则执行
    • 绑定方法: addEventListener(eventType, handler, useCapture)/removeEventListener

        button.addEventListener('click', handleClick)
      
  • DOM0 级事件模型(原始事件模型)

    • 过程:事件不会传播,即没有事件流的概念
    • 绑定方法:<button onclick="handleClick()">Click me</button>
  • IE 事件模型

    • 过程(两个):事件处理阶段 + 事件冒泡阶段
      • 事件处理阶段 - 事件到达目标元素,触发目标元素的监听函数
      • 事件冒泡阶段 - 事件从目标元素冒泡到document, 依次检查经过的节点是否绑定了事件监听函数,如果有则执行
    • 绑定方法:
      // 第一个参数:eventType - 指定事件类型(注意加on)
      btn.attachEvent(onclick, handler);  // detachEvent