DOM事件模型或机制

106 阅读1分钟

DOM事件模型

事件流指的就是当一个 HTML 元素产生一个事件时,该事件会在元素节点与根节点之间的路径传播,所经过的节点都会收到该事件,这个过程称为DOM事件。

1. 事件冒泡

事件冒泡指的是 IE 5的事件流,事件从最具体的元素接收开始,然后从内到外传播,寻找监听同样类型事件的祖先节点。

2. 事件捕获

事件捕获值得是网景 Netscape浏览器提出的事件流,与事件冒泡刚好相反,事件是从最外层的目标向内传播,也就是由根节点向子节点传播。

3. w3c处理方式

由于 IE 和网景提出的两种不同的事件模型,两种事件模型都有各自的优缺点,于是 W3C 决定浏览器应该同时支持两种调用顺序。DOM事件流中,主要经历3个阶段,事件捕获阶段,目标触发阶段,事件冒泡阶段。

1.png

4. addEventListener

W3C 规定浏览器应该同时支持两种事件模型,于是事件绑定的 API为 .addEventListener("click", fn, bool),其中的 bool不传或或传递为 flasy,那就使得 fn 走事件冒泡;如果传递的为 true,那么 fn 走事件捕获。

5. 阻止事件冒泡

  • event.stopPropagation(),这种方式注释组织了事件冒泡,而不是阻止事件本身
  • return false,这种方式不仅阻止了事件冒泡,而且阻止了事件本身。
  • 不可取消冒泡事件,有些事件是不可以取消冒泡的。比如 scroll event 事件。

2.png 其中的 cancelable 表示开发者是否能够取消冒泡。