flash 事件流 與 元件層次 的關係

來源:互聯網
上載者:User
flash 事件流包括3個過程:尋找,目標和冒泡 3個過程,他是從最底層的displayobj開始搜尋,類似與樹狀結構搜尋,displaycontainer 中尋找這些元件.以前有時會遇到事件的觸發問題,例如事件被吃掉,事件被多個元件觸發.這裡需要注意下安排他們的層次例如要監聽的對象和無關的不想被觸發的對象保持兄弟接點的層次關係. 要想都觸發保持父子的節點關係.有時候我們不得不在一個父元件中添加子元件,同時父子元件都有事件需要監聽。然而,父元件的範圍比子元件大,點擊父元件,而沒有點到子元件 只響應父元件事件,點子元件(包含自父元件中)但卻不要求父元件響應父元件的事件,只響應子元件事件。那麼這個例子解決。 package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
/**
         * @author memory
         * 事件流的測試
         */
public class TestEvent extends Sprite
{
         public function TestEvent():void{
  
          var sp:Sprite = new Sprite();
          sp.graphics.beginFill(0×00ff00,1);
          sp.graphics.drawCircle(100,100,100);
          var sp1:Sprite = new Sprite();
          sp1.graphics.beginFill(0xccff00,1);
          sp1.graphics.drawCircle(130,130,50);
          sp.addChild(sp1)
          this.addChild(sp);
         sp.addEventListener(MouseEvent.CLICK,__tellTarget1);
         sp1.addEventListener(MouseEvent.CLICK,__tellTarget2);
         }
         private function __tellTarget1(e:MouseEvent):void{
          trace(”target1 = “+e.currentTarget);
          trace(” @@”+e.target);
          if(e.currentTarget==e.target){
           trace(”equal”);
          }else{
           trace(”sorry”);
          }
         }
         private function __tellTarget2(e:MouseEvent):void{
          //(e.target as Sprite).parent.(MouseEvent.CLICK,__tellTarget1);
          trace(”target2 = “+e.currentTarget+” @@”+e.target);
          //(e.target as Sprite).parent.addEventListener(MouseEvent.CLICK,__tellTarget1);
         }
}
}

//———————-總結——————————

使用先移出監聽在加監聽,在子元件事件中是不行的,因為事件流的冒泡階段還會遍曆他的父元件。

通過判斷 e.currentTarget==e.target 是否相同 即可知道事件觸發的元件是不是該元件。解決。

注意通常事件是在target 和冒泡階段調用元件的監聽事件,可以設定修改添加監聽的第3個參數true。但整個流程就會發生變化因為他不包含target 階段

使用sp.mouseChildren=false; 可以忽略子元件的事件流,當成子元件不存在 sp.buttonMode =true; 出現手型按鈕指示

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.