1. 程式人生 > >Event Flow(事件流)

Event Flow(事件流)

DOM Event:事件流動(Event Flow):

定義:

         DOM(文件物件模型)結構是一個樹型結構,當一個HTML元素產生一個事件時,該事件會在元素節點與根結點之間的路徑傳播,路徑所經過的結點都會收到該事件,這個傳播過程可稱為DOM事件流。 [1]            DOM同時支援兩種事件模型: 捕獲型事件冒泡型事件,但是,捕獲型事件先發生。兩種事件流會觸發DOM中的所有物件,從 document物件開始,也在document物件結束。

兩種事件流:

  1. 冒泡事件流

          當事件在某一DOM元素被觸發時,例如使用者在客戶名位元組點上點選滑鼠,事件將跟隨著該節點繼承自的各個父節點冒泡穿過整個的DOM節點層次,直到它遇到依附有該事件型別處理器的節點,此時,該事件是onclick事件。在冒泡過程中的任何時候都可以終止事件的冒泡,在遵從 W3C標準的瀏覽器裡可以通過呼叫 事件物件上的stopPropagation()方法,在Internet Explorer裡可以通過設定事件物件的cancelBubble屬性為true。如果不停止事件的傳播,事件將一直通過DOM冒泡直至到達文件根。

   2.捕獲事件流

           事件的處理將從DOM層次的根開始,而不是從觸發事件的目標元素開始,事件被從目標元素的所有祖先元素依次往下傳遞。在這個過程中,事件會被從文件根到事件目標元素之間各個繼承派生的元素所捕獲,如果事件監聽器在被註冊時設定了useCapture屬性為true,那麼它們可以被分派給這期間的任何元素以對事件做出處理;否則,事件會被接著傳遞給派生元素路徑上的下一元素,直至目標元素。事件到達目標元素後,它會接著通過DOM 節點再進行冒泡。

DOM事件流模型:

 

三階段

在DOM相容瀏覽器中,事件流分為3個階段: (1)捕獲階段:事件從Document節點自上而下向目標節點傳播的階段; (2)目標階段:真正的目標節點正在處理事件的階段; (3)冒泡階段:事件從目標節點自上而下向Document節點傳播的階段。  

獨特性質

DOM事件流最獨特的性質是,文字節點也觸發事件(在IE中不會),當滑鼠單擊“單擊此文字”文字時會觸發 click事件,該事件的捕獲階段最先開始,從Document節點開始逐漸向下傳播,直到“單擊此文字”文字節點,事件進入目標階段,在目標階段結束之後,事件由“單擊此文字”文字節點開始事件的冒泡階段,直到Document節點為止。