第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > JS事件流(事件冒泡 事件委托)

JS事件流(事件冒泡 事件委托)

时间:2021-08-09 23:11:22

相关推荐

JS事件流(事件冒泡 事件委托)

DOM事件流

事件流描述的是从页面中接受事件的顺序

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流

分为三个阶段:

捕获阶段(从上往下,从外往内)目标阶段冒泡阶段(从下往上,从内往外)

注意:js只能执行捕获或者冒泡其中的一个阶段,两者不可共存

onclick和attachEvent只能得到冒泡阶段,如果需要捕获阶段的话,则需要使用addEventListener

事件冒泡

事件冒泡:IE最早提出,事件开始时由具体的元素接收,然后逐级向上传播到DOM最顶层节点的过程

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>*{margin: 0;padding: 0;}.father{position: relative;width: 300px;height: 300px;margin: 100px auto;background-color: pink;}.son{width: 200px;height: 200px;background-color: purple;position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);}</style></head><body><div class="father"><div class="son"></div></div></body><script>var father = document.querySelector('.father');var son = document.querySelector('.son')// 捕获阶段 如果addEventListener 第三个参数为true那么则处于捕获阶段father.addEventListener('click',function(){alert('I am Father!!!');})son.addEventListener('click',function(){alert('I am son~');})</script></html>

由上图观之,当我们点击子元素时,由于冒泡的存在,父元素也触发了点击事件.

注意:并非所有的事件都有冒泡,比如onblur,onfocus,onmouseenters,onmouseleave

事件捕获

事件捕获:网景最早提出,由DOM最顶层节点开始,然后逐级向下传播到最具体的元素接收的过程

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>*{margin: 0;padding: 0;}.father{position: relative;width: 300px;height: 300px;margin: 100px auto;background-color: pink;}.son{width: 200px;height: 200px;background-color: purple;position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);}</style></head><body><div class="father"><div class="son"></div></div></body><script>var father = document.querySelector('.father');var son = document.querySelector('.son')// 冒泡阶段:如果addEventListener第三个参数是false或者省略,那么则处于冒泡阶段father.addEventListener('click',function(){alert('I am Father!!!');},true)son.addEventListener('click',function(){alert('I am son~');},true)</script></html>

形象化解释

我们向水里面扔一块石头,首先它会有一个下降的过程,该过程就理解为捕获阶段。而当石头沉入水底后,水中就会产生从下到上的泡泡,这个阶段则为冒泡阶段。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。