Egret采用了和Flash类似的"事件流"机制,如果您对事件尚不了解,可以参照Adobe关于Flash事件流的说明。事件的基类是Event,所有的事件类从Event扩展而来,这一点和Flash一致。来看一下Event的构造函数:
public constructor(type:string, bubbles:boolean = false, cancelable:boolean = false) {
this._type = type;
this._bubbles = bubbles;
this._cancelable = cancelable;
}
这就说明Egret中的事件支持冒泡机制,您可以在创建事件的时候决定它是否冒泡,同样也就有了target和currentTarget之分。
来看一个例子:
/**显示*/
private onResourceLoadComplete():void {
var container = new egret.DisplayObjectContainer();
container.touchChildren = true;//等同于Flash的mouseChildren
container.touchEnabled = true;//设置容器是否响应Touch交互
var bitmap1 = new egret.Bitmap(RES.getRes("egretIcon"));
bitmap1.name = "myBitmap";
bitmap1.touchEnabled = true;
container.addChild(bitmap1);
container.name = "myContainer";
container.x = container.y = 100;
this.addChild(container);
container.addEventListener(egret.TouchEvent.TOUCH_TAP,this.touchHandler,container);
}
/**事件侦听处理*/
private touchHandler(event:egret.TouchEvent):void {
var msg:string = event.type;
msg += "\n"+event.stageX+","+event.stageY;
msg += "\n"+event.localX+","+event.localY;
msg += "\n"+event.currentTarget.name+","+event.target.name;
alert(msg);
}
点击后,可以看到下面的信息: