事件流

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

  

原文地址:https://www.cnblogs.com/ddw1997/p/2756799.html