flash 事件流 与 元件层次 的关系

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; 出现手型按钮指示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值