|
动作(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);