zoukankan      html  css  js  c++  java
  • 事件流

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

      

  • 相关阅读:
    MPF源码分析之资源文件加载
    oracle存储过程代码日志记录
    fix8源码分析之日志模块
    oracle日期转整数
    记录OCI操作一个诡异的问题
    记录一个虚拟机重启网络启动失败问题
    buff占用内存高
    MFC程序编译链接问题汇总一
    回调函数模型设计
    利用call与apply向函数传递参数
  • 原文地址:https://www.cnblogs.com/ddw1997/p/2756799.html
Copyright © 2011-2022 走看看