之前對事件的瞭解停留在事件冒泡的概念。 一提到就想到了事件不斷的向上冒泡的過程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)
若有啥疑問歡迎一塊兒討論