很多文章会讲到捕获过程是从外向内,冒泡过程是从内向外(或者捕获从上到下,冒泡从下到上),但是这里我希望讲清楚,为什么会有捕获过程和冒泡过程。我们刚提到,实际上点击事件来自触摸屏或者鼠标,鼠标点击并没有位置信息,但是一般操作系统会根据位移的累积计算出来,跟触摸屏一样,提供一个坐标给浏览器。那么,把这个坐标转换为具体的元素上事件的过程,就是捕获过程了。而冒泡过程,则是符合人类理解逻辑的:当你按电视机开关时,你也按到了电视机。所以我们可以认为,捕获是计算机处理事件的逻辑,而冒泡是人类处理事件的逻辑。
电脑屏幕就好比这么张桌子,div父子级的嵌套就好比桌子上有一叠物品,笔记本叠在字典上,闹钟叠在笔记本上;
捕获:从外向内,或者从上到下响应
当我们手指触碰闹钟的时候,同时,你间接地触碰了笔记本和字典。而对于书桌来说,这三个物品是在同一个地方,同一个坐标点。
冒泡:从内向外,或者从下到上响应;
假设每个物品都有触碰函数,触碰一次就会闪一次光;闹钟(红光),笔记本(黄光),字典(蓝光),桌面(绿光);
阻止冒泡:event.stopPropagation();或者return false;
相当于在触碰的时候,我们人工给物品下层绝缘了;
比如我们给笔记本的点击函数设置了return false;那么笔记本和字典的联系就断了,断电,那么当我们触碰闹钟的时候,下层的字典神经麻木没有触摸感,只会发出:黄光;字典以下的物品(桌面)就不会再发光!