samtiger


          QQ:418148757
          Name:yangchuan
          數(shù)據(jù)加載中……
          flex基礎(chǔ)之事件機(jī)制

          Flex事件執(zhí)行流程:
          第一階段為:1:捕獲階段,第二階段為:(2:目標(biāo)階段,3:冒泡階段)。
          所以:addEventListener方法注冊(cè)的監(jiān)聽器有兩種,第一種是處理捕獲階段的監(jiān)聽器(addEventListener的第三個(gè)參數(shù)useCapture 為true)
          第二種就是處理目標(biāo)和冒泡階段的監(jiān)聽器(第三個(gè)參數(shù)useCapture 為false)。

          捕獲階段流程:
          Flex會(huì)去查找事件的觸發(fā)源,它是通過根顯示元素(root display object)逐層向下尋蹤,并從上往下,依次觸發(fā)這些節(jié)點(diǎn)的當(dāng)前事件的處理函數(shù)(如果他們都用捕獲階段的監(jiān)聽器注冊(cè)了這個(gè)事件)直到找到事件發(fā)起源頭的父節(jié)點(diǎn)。并觸發(fā)完父節(jié)點(diǎn)的這個(gè)事件為止。但它不會(huì)調(diào)用事件觸發(fā)源節(jié)點(diǎn)的事件。
          例如:
          test.mxml文件下:
          application節(jié)點(diǎn)--vbox(id=vb)節(jié)點(diǎn)--button(id=bt)節(jié)點(diǎn)。


          如果在application的creationComplete中:將以上所有組件的click事件注冊(cè)為捕獲監(jiān)聽器。
          如:
          addEventListener(MouseEvent.CLICK, btnClick2, true); 
          vb.addEventListener(MouseEvent.CLICK, btnClick3,true); 
          bt.addEventListener(MouseEvent.CLICK, btnClick4,true); 
          如果在bt上點(diǎn)擊,執(zhí)行流程如下:
          Flash Player會(huì)去查找事件的觸發(fā)源(bt),通過根顯示元素(root display object)(這里就是application)逐層向下尋蹤,并從上往下,依次調(diào)用它們的click事件(如果他們都注冊(cè)了捕獲階段的click事件)直到找到事件的發(fā)起源頭的父節(jié)點(diǎn),上面例子中會(huì)找到vb,并執(zhí)行完vb的click事件后,就不再查找下邊的bt組件和執(zhí)行它的click事件。

          第二階段:
          一般情況下,第二階段的目標(biāo)階段,也是執(zhí)行mxml文檔的目標(biāo)節(jié)點(diǎn)配置的那個(gè)事件處理函數(shù),然后再處理對(duì)應(yīng)的監(jiān)聽器(處理目標(biāo)和冒泡階段的監(jiān)聽器)注冊(cè)的那個(gè)處理函數(shù)。

           如果文檔該節(jié)點(diǎn),沒有配置事件處理,則只執(zhí)行通過addEventListener注冊(cè)的事件處理方法,否則,如果配置了,就先執(zhí)行mxml的配置函數(shù)處理,接著處理通過監(jiān)聽器注冊(cè)的函數(shù)。

          最后就是冒泡階段:
          這個(gè)階段與捕獲階段相反,它會(huì)從從目標(biāo)節(jié)點(diǎn)的父節(jié)點(diǎn)開始依次向上查找并執(zhí)行父節(jié)點(diǎn)的mxml配置事件和通過監(jiān)聽器注冊(cè)的事件處理函數(shù)。(這些處理函數(shù)也是用處理目標(biāo)和冒泡階段的監(jiān)聽器注冊(cè)的)


          也就是說:捕獲階段的事件觸發(fā)只能是用處理這個(gè)階段的監(jiān)聽器去注冊(cè)。目標(biāo)和冒泡階段的事件觸發(fā),也只能是處理這個(gè)階段的監(jiān)聽器去注冊(cè)。如果,要讓同一個(gè)事件,在捕獲階段或目標(biāo)和冒泡階段都執(zhí)行的話,需要用addEventListener注冊(cè)兩次,將第三個(gè)參數(shù)useCapture true和false各設(shè)置一次。

          posted on 2010-04-14 21:41 sam.chuan.yang 閱讀(311) 評(píng)論(0)  編輯  收藏 所屬分類: flex基礎(chǔ)

          主站蜘蛛池模板: 溆浦县| 祁连县| 德州市| 南江县| 阿拉善盟| 昌都县| 临漳县| 淮北市| 綦江县| 贵州省| 郴州市| 五大连池市| 海阳市| 视频| 新余市| 阳高县| 江口县| 嫩江县| 中江县| 吉林市| 衡南县| 河北区| 天长市| 郁南县| 新巴尔虎左旗| 崇礼县| 建昌县| 宁都县| 都匀市| 萨迦县| 新营市| 台中市| 怀来县| 精河县| SHOW| 宜良县| 五华县| 黑河市| 黎城县| 左贡县| 亳州市|