事件冒泡的实际用途 OOP去死 懒人无罪

事件冒泡的实际用途 OOP去死 易用最高

有10个按钮,分别给予事件,该怎么做呢?
好吧,不管三七二十一,开个FLA,随便建个按钮,然后复制它十几几十个,首帧或者文档类执行这样的代码

addEventListener(MouseEvent.CLICK,f);
function f(event:MouseEvent):void{
 var i:int=getChildIndex(event.target as DisplayObject)+1;
 trace("我点击的是第"+i.toString()+"个按钮");
 if (i%2==0){
 trace("偶号站右边");
 event.target.x=stage.stageWidth-event.target.width;
 }else if (i%2==1){
 trace("奇号站左边");
 event.target.x=0;
 }else{
 trace("奇偶都不是的- -那是不可能的");
 }
}


我这是抛砖引玉了。总之这就是冒泡的效果,具体内容网上都有说的。容器里所有的对象都会接受到父容器的事件。只要给了父类事件,就不需要再给子类设置事件了。
再看下一个

开新文件,随便再建个按钮,叫tester吧。
addEventListener(MouseEvent.CLICK,f);
function f(event:MouseEvent):void{
 trace("你点我儿子干嘛?");
}

trace("tester:我要发一个事件给自己");
tester.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

其实这才是真正的冒泡阶段,反过来,子容器接受到的鼠标事件也可以被父容器接受到。在这个例子里,tester自己给自己发了个事件,父容器的相同事件也被触发了。这点许多时候也是有用的


并不是所有的事件都会冒泡,例如ENTERFRAME,或者我自己新建的Event,是否冒泡取决于Event的bubbles属性,不同事件的bubbles值不同。这个是不可写的,但我们可以在创建Event的时的第2个参数设置它。
dispatchEvent(new Event("myevt",true));
这样发送的事件就会有冒泡的特点,就和MouseEvent一样。比如,我想发个普通的,带内容的事件,DataEvent看起来就很好。但DataEvent默认是不冒泡的,在处理菜单这样的东西就不好使了。那我们就
dispatchEvent(new DataEvent("menuclick",true,false,"AAA"));

这样,自己给自己发事件,只监听父容器就可以,甚至是父容器的父容器也能接受到。

转载于:https://www.cnblogs.com/wlm123/archive/2009/12/17/1626451.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值