动作(click,down,up...)执行在哪个目标上(dispatchEvent),它就是target 然后你设置的侦听器的对象,永远是currentTarget 如果在事件流去target的路上,路过了currentTarget,那么就是1捕获阶段 如果target和currentTarget相同,那就事件流到达侦听的目标,就是2目标阶段 如果事件流在从target回去的路上,遇到currentTarget,那就是3冒泡阶段 MouseEvent.ROLL_OVER事件派发对象为mousePoint下父对象及子对象,无冒泡阶段 MouseEvent.MOUSE_OVER事件派发对象为mousePoint下子对象,但有冒泡阶段 import flash.events.Event; import flash.display.Sprite; import flash.display.InteractiveObject; import flash.display.DisplayObjectContainer; var parentMc:Sprite=new Sprite(); parentMc.name="父"; var sonMc:Sprite=new Sprite(); sonMc.name="子"; var grandsonMc:Sprite=new Sprite(); grandsonMc.name="孙"; sonMc.addChild(grandsonMc); parentMc.addChild(sonMc); this.addChild(parentMc); function addEvent(displayObjContainer:DisplayObjectContainer):void { if (! displayObjContainer) { return; } for (var i:int = 0; i < displayObjContainer.numChildren; i++) { var obj:InteractiveObject = displayObjContainer.getChildAt(i) as InteractiveObject; if (obj) { obj.addEventListener("testevent",testFun,true); obj.addEventListener("testevent",testFun,false); } if (obj is DisplayObjectContainer) { addEvent(DisplayObjectContainer(obj)); } } } function testFun(event:Event):void { trace(event.target.name,event.currentTarget.name,event.eventPhase) } addEvent(stage); stage.addEventListener("testevent",testFun,false); stage.addEventListener("testevent",testFun,true); sonMc.dispatchEvent(new Event("testevent",true,false)); grandsonMc.dispatchEvent(new Event("testevent",true,false));
|
关于Event.REMOVED_FROM_STAGE
var count:int=0; var mcParent:MovieClip = new MovieClip(); mcParent.name="p" var mcA:MovieClip = new MovieClip(); mcA.name="A" var mcB:MovieClip = new MovieClip(); mcB.name="B" var mcD:MovieClip = new MovieClip(); mcD.name="D" this.addChild(mcParent); mcParent.addChild(mcA); mcParent.addChild(mcB); mcB.addChild(mcD); mcD.addEventListener(Event.REMOVED_FROM_STAGE,function onRemovedB(evt:Event):void{ trace("D中执行了: ","target="+evt.target.name,"currentTarget="+evt.currentTarget.name,evt.eventPhase==1?"捕获":evt.eventPhase==2?"目标":"冒泡"); }); mcB.addEventListener(Event.REMOVED_FROM_STAGE,function onRemovedB(evt:Event):void{ trace("B中执行了: ","target="+evt.target.name,"currentTarget="+evt.currentTarget.name,evt.eventPhase==1?"捕获":evt.eventPhase==2?"目标":"冒泡"); }); mcA.addEventListener(Event.REMOVED_FROM_STAGE,function onRemovedA(evt:Event):void{ count++; trace("A中第<"+count+">次"+"执行了: ","target="+evt.target.name,"currentTarget="+evt.currentTarget.name,evt.eventPhase==1?"捕获":evt.eventPhase==2?"目标":"冒泡"); if(count==2){ mcA.removeEventListener(Event.REMOVED_FROM_STAGE,onRemovedA); return } mcParent.removeChild(mcA); }); mcParent.addEventListener(Event.REMOVED_FROM_STAGE, function onRemoveP(evt:Event):void{ trace("Parent中执行了捕获阶段: ","target="+evt.target.name,"currentTarget="+evt.currentTarget.name,evt.eventPhase==1?"捕获":evt.eventPhase==2?"目标":"冒泡"); },true); mcParent.addEventListener(Event.REMOVED, function onRemoveP(evt:Event):void{ trace("Parent中执行了目标阶段: ","target="+evt.target.name,"currentTarget="+evt.currentTarget.name,evt.eventPhase==1?"捕获":evt.eventPhase==2?"目标":"冒泡"); },false); this.removeChild(mcParent);