流的概念,在现今的JavaScript中随处可见。好比说React中的单向数据流,Node中的流,又或是今天本文所讲的DOM事件流,都是流的一种生动体现。用术语说流是对输入输出设备的抽象。以程序的角度说,流是具备方向的数据。事件流所描述的就是从页面中接受事件的顺序。事件流也有两种,分别是事件冒泡和事件捕获。浏览器
在全部的现代浏览器当中——除了IE9以前的版本——都实现了DOM2标准事件模型,即事件处理过程的三个阶段:捕获,目标,冒泡;code
事件冒泡即事件开始时,由最具体的元素接收(也就是事件发生所在的节点),而后逐级传播到较为不具体的节点。对象
事件捕获的概念,与事件冒泡正好相反。它认为当某个事件发生时,父元素应该更早接收到事件,具体元素则最后接收到事件事件
事件一开始从文档的根节点流向目标对象(捕获阶段),而后在目标对向上被触发(目标阶段),以后再回溯到文档的根节点(冒泡阶段)。ip
事件冒泡过程,是能够被阻止的。防止事件冒泡而带来没必要要的错误和困扰。文档
这个方法就是:stopPropagation()
io
stopPropagation() 方法:终止事件在传播过程的捕获、目标处理或起泡阶段进一步传播。调用该方法后,该节点上处理该事件的处理程序将被调用,事件再也不被分派到其余节点。原理