事件流:事件捕获,事件冒泡

105 阅读1分钟

事件流

当事件发生时,会在发生事件的元素节点与DOM树根节点之间按照特定的顺序进行传播, 这个过程称之为事件流。

事件流分为事件捕获和事件冒泡二个阶段,默认为事件冒泡

image.png

事件捕获

事件由父元素传递到子元素的过程叫做事件捕获。(ture) 查找事件的过程:document–>html–>body–>元素节点–>文本节点向下响应

当点击按钮时执行顺序 => body,button , span 

当点击body时只输出body

image.png

事件冒泡(默认)

事件由子元素传递到父元素的过程叫做冒泡(false) 查找事件的过程:文本节点–>元素节点—>body—>html—>document向上响应

当点击按钮时执行顺序 => span , button , body

当点击body时只输出:body

image.png

阻止事件捕获,冒泡

js

// 阻止事件冒泡
if ( e && e.stopPropagation ) 
    //因此它支持W3C的stopPropagation()方法 
    e.stopPropagation();   //event.stopPropagation()
else 
    //否则,我们需要使用IE的方式来取消事件冒泡 
    window.event.cancelBubble = true; 
}

// 阻止事件捕获
e.stopImmediatePropagation();

vue

  • .stop 阻止冒泡事件
  • .self 只有点击当前元素的时候,才会触发处理函数(忽略冒泡/捕获事件的影响)
  • .once 处理函数只被触发一次
<!-- 使用 .stop 阻止冒泡事件-->
<div @click.stop="divClick"></div>
<div @click.self="divClick"></div>
<div @click.self.once="divClick"></div>