js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播

js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播结论element.addEventListener(event,function[,useCapture])event:事件名称,如clickfunction:指定要事件触发时执行的函数,可以传入事件参数useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。默认false:在冒泡阶段执行指定事件true:在捕获阶段执行事件event.stopPropagat…

结论

element.addEventListener(event, function[, useCapture])

  1. event:事件名称,如click
  2. function:指定要事件触发时执行的函数,可以传入事件参数
  3. useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。
    默认false:在冒泡阶段执行指定事件
    true:在捕获阶段执行事件

event.stopPropagation():阻止事件传播,用于function(event){}中

图解捕获与冒泡

实例:aa里面有个bb,bb里面有个cc,当点击cc时会发生什么?
angular_lyt

实例代码

<div id="aa">
    aa
    <div id="bb">
      bb
      <div id="cc">cc</div>
    </div>
  </div>
  function print(e){ 
   
     console.log(this.id);
   }
   aa.addEventListener('click',print);//第三个参数默认为false
   bb.addEventListener('click',print);
   cc.addEventListener('click',print);
div{ 
   
      display: flex;
      align-items: center;
      justify-content: center;
    }
    #aa{ 
   
      margin:100px 0 0 400px;
      background-color: #f0ad4e;
      height:300px;
      width:300px;
    }
    #bb{ 
   
      background-color: #4078c0;
      height:200px;
      width:200px;
    }
    #cc{ 
   
      background-color: #42b983;
      height:100px;
      width:100px;
    }

讲解

  1. 当点击cc时,按cc>bb>aa依次捕获,再按aa>bb>cc依次冒泡;因为第三个参数(useCapture)默认为false,所以在冒泡阶段执行各自click函数,结果如下:
    cc
    bb
    aa
  2. 当js修改为
 function print(e){ 
   
    console.log(this.id);
  }
  aa.addEventListener('click',print,true);//第三个参数默认为false
  bb.addEventListener('click',print,true);
  cc.addEventListener('click',print,true);

再点击cc时,按cc>bb>aa依次捕获,再按aa>bb>cc依次冒泡;因为第三个参数(useCapture)为true,所以在捕获阶段执行各自click函数,结果如下:
aa
bb
cc
3. 当js修改为

 function print(e){ 
   
 	e.stopPropagation();//执行完此函数后,该事件不再继续传播
    console.log(this.id);
  }
  aa.addEventListener('click',print,true);//第三个参数默认为false
  bb.addEventListener('click',print,true);
  cc.addEventListener('click',print,true);

再点击cc时,捕获cc,执行cc的click函数, 因为print函数中有e.stopPropagation(),所以执行完该函数后,click事件不再传播.结果如下:
aa

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234202.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java算法是什么_什么是java算法

    java算法是什么_什么是java算法什么是java算法算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。算法的特征:输入性:有零个或多个外部量作为算法的输入输出性:算法产生至少一个量作为输出确定性:算法中每条指令清晰,无歧义有穷性:算法中每条指令的执行次数有限,执行每条指令是时间也有限可行性:算法原则上能够精确的运行,而且人们用纸和笔做有限次运算后即可完成程…

    2022年7月9日
  • C语言实现推箱子游戏

    C语言实现推箱子游戏很早就想过做点小游戏了,但是一直没有机会动手。今天闲来无事,动起手来。过程还是蛮顺利的,代码也不是非常难。今天给大家分享一下~一、介绍开发语言:C语言开发工具:Dev-C++5.11日期:2019年9月28日作者:ZackSock也不说太多多余的话了,先看一下效果图:游戏中的人物、箱子、墙壁、球都是字符构成的。通过wasd键移动,规则的话就是推箱子的规则,也就不多说了。二、代…

    2022年5月18日
  • SMTP服务器地址_imap服务器怎么设置

    SMTP服务器地址_imap服务器怎么设置认识SMTP服务器首先要知道SMTP,SMTP是“SimpleMailTransferProtocol”的缩写,即简单电子邮件传输协议,而SMTP服务器就是遵循SMTP协议发送电子邮件的服务器,用来发送或中转用户发出的电子邮件。SMTP协议是一个相对简单、高效的文本协议,使用25端口,属于TCP/IP协议族,可以帮助每台SMTP服务器在发送或中转电子邮件时找到下一个目的地,要为一个给定的域名决定…

    2022年10月3日
  • goland2021.2激活破解(已测有效)

    goland2021.2激活破解(已测有效),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
  • 汇编中的inc和dec

    汇编中的inc和dec

    2021年5月26日
  • 相机标定(Camera calibration)

    相机标定(Camera calibration)简介摄像机标定(Cameracalibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵PP的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Spring2016CS543/ECE549 Computervision)。基本的坐标系:世界坐标系(worldcoordinatesystem);相机坐标系(cameracoordina

    2022年5月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号