有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"));
这样,自己给自己发事件,只监听父容器就可以,甚至是父容器的父容器也能接受到。