美文网首页
捕获和冒泡

捕获和冒泡

作者: qxz9 | 来源:发表于2020-08-19 23:06 被阅读0次

    捕获:从外向内
    冒泡:从内向外

    在一个事件发生时,捕获过程跟冒泡过程总是先后发生,跟你是否监听毫无关联,先捕获后冒泡。

    addEventListener有三个参数:

    • 事件名称
    • 事件处理函数
    • 是否捕获(true为捕获,false为冒泡,默认为false)
    document.body.addEventListener('click', eventHandler, true)
    

    当我们实际监听事件时,默认使用冒泡模式,当开发组件时,需要通过父元素控制子元素的行为,可以使用捕获机制。

    阻止冒泡和取消默认事件
    1. 阻止冒泡
      方法:event.stopPropagation()
    <button id="btn">点击</button>
    
    javascript:
    document.body.addEventListener('click', (event) => {
      event.stopPropagation();
      console.log('捕获阶段:body');
    }, true);
    document.getElementById('btn').addEventListener('click', (event) => {
      console.log('捕获阶段:button');
    }, true);
    document.body.addEventListener('click', (event) => {
      console.log('冒泡阶段:body');
    }, false);
    document.getElementById('btn').addEventListener('click', (event) => {
      console.log('冒泡阶段:button');
    }, false);
    

    如果没有加event.stopPropagation()的话,执行顺序应该是:
    捕获阶段:body
    捕获阶段:button
    冒泡阶段:button
    冒泡阶段:body

    但是在捕获阶段的body层事件处理方法内增加了event.stopPropagation()的话,执行顺序就变成了:
    捕获阶段:body

    由此可得,在上面正常执行顺序的任意一层,增加event.stopPropagation(),那么原本跟在它后面执行的事件都会被阻止

    因为事件执行到了捕获阶段body层后,被阻止了,该事件不会再向内或向外执行。

    1. 取消默认事件
      方法:event.preventDefault()
      作用:取消一个目标元素的默认行为,例如:a标签的链接跳转行为

    相关文章

      网友评论

          本文标题:捕获和冒泡

          本文链接:https://www.haomeiwen.com/subject/gufjjktx.html