云下的天空

          堅持 隨心而動 走自己的路

           

          (轉(zhuǎn)載)冒泡事件理解

            原文鏈接:http://bbs.9ria.com/viewthread.php?tid=59522

          發(fā)生事件時,該事件在事件流的三個階段中移動:
          捕獲階段,該階段從顯示列表層次結(jié)構(gòu)的頂部流動到目標(biāo)節(jié)點之前的節(jié)點;
          目標(biāo)階段,該階段只包括目標(biāo)節(jié)點;
          冒泡階段,該階段從目標(biāo)節(jié)點的后續(xù)節(jié)點沿顯示列表層次結(jié)構(gòu)向上往回流動。
          EventDispatcher 類實現(xiàn) IEventDispatcher 接口,并且是 DisplayObject 類的基類。 EventDispatcher 類允許顯示列表上的任何對象都是一個事件目標(biāo),同樣允許使用 IEventDispatcher 接口的方法。 
          事件目標(biāo)是 Flash ® Player 事件模型的重要組成部分。 

          事件目標(biāo)是事件如何通過顯示列表層次結(jié)構(gòu)這一問題的焦點
          當(dāng)發(fā)生鼠標(biāo)單擊或按鍵等事件時,F(xiàn)lash Player 會將事件對象調(diào)度到從顯示列表根開始的事件流中
          然后該事件對象在顯示列表中前進,直到到達事件目標(biāo),然后從這一點開始其在顯示列表中的回程
          在概念上,到事件目標(biāo)的此往返行程被劃分為三個階段:
          、、捕獲階段包括從根到事件目標(biāo)節(jié)點之前的最后一個節(jié)點的行程,
          、、目標(biāo)階段僅包括事件目標(biāo)節(jié)點,
          、、冒泡階段包括回程上遇到的任何后續(xù)節(jié)點到顯示列表的根。
          通常,使用戶定義的類能夠調(diào)度事件的最簡單方法是擴展 EventDispatcher。 如果無法擴展(即,如果該類已經(jīng)擴展了另一個類),則可以實現(xiàn) IEventDispatcher 接口,創(chuàng)建 EventDispatcher 成員,并編寫一些簡單的掛鉤,將調(diào)用連接到聚合的 EventDispatcher 中。
          二、說明 首先明確幾個概念
          1、顯示列表根:假如你有abc 三個panel c在b中 b在a中這樣的嵌套關(guān)系 那么c-->b-->a  a就是列表的根
          2、目標(biāo):假如你在c上發(fā)了一個事件那么c就是事件的目標(biāo) 有些復(fù)雜控件有click事件 不過發(fā)事件的目標(biāo)不是它本身 那個currenttarget才是它本身
          3、事件傳遞的流程:首先你派發(fā)事件在c上 事件首先從a-->b-->c-->b-->a這樣一個完整的循環(huán)
          4、捕獲階段:事件在a-->b的這個階段(注意和b-->a不同)
          5、目標(biāo)階段 僅當(dāng)事件到達c的時候
          6、冒泡階段 b-->a這樣經(jīng)過的階段
          三、具體應(yīng)用
          當(dāng)你在c上面派發(fā)了一個事件  然后你想在c的頂層a上監(jiān)聽到
          你可能這么做
          首先你在c上this.dispatchEvent(new Event("cevent",false)); 這樣發(fā)了一個事件
          藍色字體 意味著這個事件只會在捕獲和目標(biāo)階段 a->b->c
          然后你在a上監(jiān)聽這個事件 a.addEventListener("cevent",function():void{trace("原始論壇目標(biāo)發(fā)出的事件");},false);
          紅色字體 意味著你打算 讓偵聽器只在目標(biāo)或冒泡階段處理事件 就是c->b->a
          四、簡單說來就是 你發(fā)出的事件走的是a->b->c的階段 而你偵聽只想偵聽b->a階段c只走了一次所以不會檢測到c的事件
          任何一個false改成true就可以了
          藍色改成true意味著事件在所有過程傳遞
          紅色改成true意味著偵聽捕獲階段
          再簡單說 新建事件不冒泡 默認偵聽只偵聽冒泡

          posted on 2011-06-05 18:04 天空布藍 閱讀(543) 評論(0)  編輯  收藏 所屬分類: Flex4

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          Flex學(xué)習(xí)鏈接

          搜索

          •  

          最新評論

          • 1.?re: tomcat7的配置
          • 新建變量名: TOMCAT_HOME 應(yīng)該為CATALINA_HOME
          • --houkai
          • 2.?re: tomcat7的配置
          • 確實是的@寒澈
          • --houkai
          • 3.?re: tomcat7的配置
          • @ftp123
            你娘里個大雪碧 里面會有common這個文件夾嗎 不知道還尼瑪在這瞎比比 純尼瑪誤導(dǎo)人 我最惡心的就是這樣沒事裝逼的人 艸
          • --cao
          • 4.?re: tomcat7的配置
          • 從哪抄來的,是抄的,你也說聲啊,要不自己測試下也可以,害人測試半天。
          • --ftp123
          • 5.?re: tomcat7的配置
          • %TOMCAT_HOME%\common\lib 從tomcat6.0開始已經(jīng)沒有common文件夾了,直接用\lib,害我找了半天common文件夾啊,趕快改過來吧
          • --寒澈

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 绥化市| 关岭| 桓台县| 黄石市| 永年县| 潮安县| 都安| 临城县| 祥云县| 察哈| 和田市| 西藏| 太仆寺旗| 巫山县| 云梦县| 即墨市| 吉水县| 长治县| 海阳市| 铅山县| 新沂市| 博兴县| 七台河市| 阿合奇县| 江北区| 乐清市| 塘沽区| 曲松县| 金乡县| 舒城县| 龙江县| 华亭县| 桓台县| 乐昌市| 浦江县| 五家渠市| 高淳县| 余干县| 安阳县| 汝城县| 百色市|