事件處理基礎知識(一)捕獲、目標、冒泡三個階段


事件流

  只要發生事件,Flash Player 或 AIR 就會調度事件對象。如果事件目標不在顯示列表中,則 Flash Player 或 AIR 將事件對象直接調度到事件目標。例如,Flash Player 將 progress 事件對象直接調度到 URLStream 對象。但是,如果事件目標在顯示列表中,則 Flash Player 將事件對象調度到顯示列表,事件對象將在顯示列表中穿行,直到到達事件目標。
  “ 事件流” 說明事件對象如何在顯示列表中穿行。顯示列表以一種可以描述為樹的層次結構形式進行組織。位於顯示列表層次結構頂部的是舞台,它是一種特殊的顯示對象容器,用作顯示列表的根。舞台由 flash.display.Stage 類表示,且只能通過顯示對象訪問。每個顯示對象都有一個名為 stage 的屬性,該屬性表示應用程序的舞台。
  當 Flash Player 或 AIR 為顯示列表相關的事件調度事件對象時,該事件對象將進行一次從舞台到“ 目標節點” 的往返行程。DOM 事件規范將目標節點定義為代表事件目標的節點。也就是說,目標節點是發生了事件的顯示列表對象。例如,如果用戶單擊名為 child1 的顯示列表對象, Flash Player 或 AIR 將使用 child1 作為目標節點來調度事件對象。
  從概念上來說,事件流分為三部分。第一部分稱為捕獲階段,該階段包括從舞台到目標節點的父節點范圍內的所有節點。第二部分稱為目標階段,該階段僅包括目標節點。第三部分稱為冒泡階段。冒泡階段包括從目標節點的父節點返回到舞台的行程中遇到的節點。

  如果您將顯示列表想像為一個垂直的層次結構,其中舞台位於頂層(如下圖顯示),那么這些階段的名稱就更容易理解了:

  

  如果用戶單擊 Child1 Node,Flash Player 或 AIR 將向事件流調度一個事件對象。如下面的圖像所示,對象的行程從舞台開始,向下移到父節點,然后移到 Child1 節點,再“ 冒泡” 返回到舞台(即在行程中重新經過父節點,再返回到舞台。

  在此示例中,捕獲階段在首次向下行程中包括舞台和父節點。目標階段包括在 Child1 花費的時間。冒泡階段包括在向上返回到根節點的行程中遇到的父節點和舞台。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM