事件冒泡机制的简单应用
作者:jackgun 日期:2007-10-16
事件冒泡机制的简单应用
关于事件冒泡机制原理已经很多资料了,咱就不扯了。
中文的有:
黑羽那里的as3教程:http://www.kingda.org/
经典上的这个:http://bbs.blueidea.com/thread-2799214-1-1.html
可以看。
下面一个简单的例子:
类文件:EventTest.as
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class EventTest extends Sprite {
public function EventTest() {
this.graphics.beginFill(0x0000FF);
this.graphics.drawRect(0,0,100,100);
this.graphics.endFill();
this.addEventListener(MouseEvent.CLICK,clickfunction);
}
private function clickfunction(evt:MouseEvent):void {
//自定义事件,第二个参数为冒泡支持,你可以改为 false 试试
var _event : Event = new Event("clickbutton",true);
dispatchEvent(_event);
}
}
}
Fla 文件
帧代码:
import flash.display.Sprite;
import EventTest;
var a1:Sprite=rect(10,10,200,200);
var a2:Sprite=rect(30,30,160,160);
var a3:EventTest=new EventTest();
a1.name="a1";
a2.name="a2";
a3.name="a3";
addChild(a1);
a1.addChild(a2);
a2.addChild(a3);
a3.x=50;
a3.y=50;
a1.addEventListener("clickbutton",clickHandler);
function clickHandler(evt:Event):void{
trace("监听到事件="+evt.type+" \n目标="+evt.target.name);
}
function rect(_x:uint,_y:uint,_w:uint,_h:uint):Sprite{
var tmp:Sprite=new Sprite();
tmp.graphics.beginFill(0xFFFFFF*Math.random());
tmp.graphics.drawRect(_x,_y,_w,_h);
tmp.graphics.endFill();
return tmp;
}
试试看就知道效果了,关键在于
var _event : Event = new Event("clickbutton",true);
public 函数 Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)
bubbles:Boolean (default = false) — 确定 Event 对象是否参与事件流的冒泡阶段。 默认值为 false。
指示事件是否为冒泡事件。 如果事件可以冒泡,则此值为 true;否则为 false。
发生事件时,该事件在事件流的三个阶段中移动:捕获阶段,该阶段从显示列表层次结构的顶部流动到目标节点之前的节点;目标阶段,该阶段只包括目标节点;冒泡阶段,该阶段从目标节点的后续节点沿显示列表层次结构向上往回流动。
某些事件(例如 activate 和 unload 事件)没有冒泡阶段。 对于没有冒泡阶段的事件,bubbles 属性的值为 false。
这样,对于多层子对象里的事件,我们直接对它们的父级容器添加侦听器就可以,而不必像as2时要一层层转发了。
上一篇
下一篇

文章来自:
Tags: