理解DOM事件流的三个阶段

本文主要解决两个问题:
  1.什么是事件流
  2.DOM事件流的三个阶段

事件流之事件冒泡与事件捕获

在浏览器发展的过程中,开发团队遇到了一个问题。那就是页面中的哪一部分拥有特定的事件?
可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其实不是一个圆,而是纸上所有的圆。放到实际页面中就是,你点击一个按钮,事实上你还同时点击了按钮所
有的父元素。 开发团队的问题就在于,当点击按钮时,是按钮最外层的父元素先收到事件并执行,还是具体元素先收到事件并执行?所以这儿引入了事件流的概念。

事件冒泡


 

事件冒泡即事件开始时,由最具体的元素接收(也就是事件发生所在的节点),然后逐级传播到较为不具体的节点。
举个栗子,就很容易明白了。

DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Event Bubblingtitle>
head>
<body>
  <button id="clickMe">Click Mebutton>
body>
html>

然后,我们给button和它的父元素,加入点击事件。 

<script type="text/javascript"> 
        var button = document.getElementById('clickMe'); 
        button.onclick = function() {
          console.log('1. You click Button');
        };
        document.body.onclick = function() {
          console.log('2. You click body');
        };
        document.onclick = function() {
          console.log('3. You click document');
        }; 
        window.onclick = function() {
          console.log('4. You click window');
        };
script>

效果如图:

在代码所示的页面中,如果点击了button,那么这个点击事件会按如下的顺序传播(Chrome浏览器):

  1. button
  2. body
  3. document
  4. window

也就是说,click事件首先在

转载于:https://www.cnblogs.com/hfxm/p/5535501.html

你可能感兴趣的:(理解DOM事件流的三个阶段)