之前对事件的了解停留在事件冒泡的概念。 一提到就想到了事件不断的向上冒泡的过程chrome
其实常见的事件模型分为事件冒泡,事件捕获浏览器
在咱们使用的全部浏览器中,都支持事件冒泡,即事件由子元素向祖先元素传播。firefox
在firefox,chrome,safari这类标准浏览器中还支付事件捕获(IE Opera不支持)代理
捕获阶段是一个和冒泡阶段彻底相反的过程,即事件由祖先元素向子元素传播,和一个石子儿从水面向水底下沉同样,要说明的是在 IE,opera浏览器中,是不存在这个阶段的。 事件
具体实现异同点:safari
attachEvent (IE Opera) 自己这个就只有2个参数List
W3C addEventListener(type,fn,boolean) 注意第三个参数支付
true : 捕获阶段事件代理
false : 冒泡阶段参数
事件代理
事件代理就是借助事件冒泡来实现的。逻辑很简单
首先咱们须要了解目标元素和祖先元素。事件冒泡就是从目标元素到祖先元素的一个过程。这样就简单了就是当鼠标点击目标元素后。其一定会通过祖先元素。这样的好处就是咱们就没有必要每个子元素都注册一个事件了。只须要在祖先元素上注册一下。祖先元素在这里就有一个代理绑定的过程这就是事件代理了。
须要说明的是我上面也提过了IE Opera 这一类不支持事件冒泡固然就不行了。还有一类事件也不支持事件冒泡好比(blur、focus、load和unload)
若有啥疑问欢迎一块儿讨论