两种,冒泡和捕获,不对是捕获和冒泡。

    document.body.addEventListener("click",function(){console.log("1")},true);
    document.body.addEventListener("click",function(){console.log("4")},false);
    document.querySelector("header").addEventListener("click",function(){console.log("2")},true);
    document.querySelector("header").addEventListener("click",function(){console.log("3")},false);

说明:

  1. 先不关注捕获还是冒泡。事件激活后是先进行捕获,然后把函数都进行注册,比如一个元素绑定了多个click事件。
  2. 然后判断addEventListener的第三个参数,ture表示捕获,false表示冒泡;
  3. 上面的body,header元素绑定了四个事件,ture优于false执行(两个都有,捕获事件优于冒泡),捕获是从body往header(从外到内,对于都是true而言),冒泡是从header往body(从里到外,对于都是false而言)
  4. 阻止捕获或者冒泡,抛开这两个东西,也就是阻止事件传播。打开chrome控制台,执行console.dir(window.Event.prototype),关注里面的四个方法initEvent、preventDefault、stopImmediatePropagation、stopPropagation,第一个初始化事件方法,第二个阻止默认行为,第三个百度一下,第四个stop:停止,propagation:传播。
  5. target、currenttarget,判定当前元素,绑或解或跳过

代码碎片
157 声望4 粉丝

小呆码