这个简单的代码在一个红色的画布上显示了一个绿色的画布,我希望绿色画布让鼠标下来的事件被他身后的孩子捕捉到--:红色画布。
我该怎么做?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Canvas id="bg" width="100%" height="100%" backgroundColor="white" />
<mx:Script>
<![CDATA[
private function init():void {
var cvstest:Canvas = new Canvas();
cvstest.width = 200;
cvstest.height = 200;
cvstest.x = 100;
cvstest.doubleClickEnabled = true;
cvstest.addEventListener(MouseEvent.DOUBLE_CLICK, dc);
cvstest.addEventListener(MouseEvent.MOUSE_DOWN, md);
cvstest.setStyle("backgroundColor",0xff0000);
this.addChild(cvstest);
var cvsselect:Canvas = new Canvas();
cvsselect.width = 20;
cvsselect.height = 20;
cvsselect.x = 140;
cvsselect.doubleClickEnabled = false;
cvsselect.mouseChildren = true;
cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2);
cvsselect.setStyle("backgroundColor",0x00ff00);
this.addChild(cvsselect);
}
public function dc (e:MouseEvent) : void {
trace("DOUBLE CLICK ON TEST CANVAS");
}
public function md (e:MouseEvent) : void {
trace("SINCLICK ON TEST CANVAS");
}
public function md2 (e:MouseEvent) : void {
trace("GREEN CLICK ON TEST CANVAS");
}
]]>
</mx:Script>
</mx:Application>发布于 2009-05-15 12:17:52
不要将鼠标向下添加到绿色画布中,即删除行
cvsselect.addEventListener(MouseEvent.MOUSE_DOWN, md2);发布于 2009-05-15 10:16:26
mouseEnable做错了诡计,还有其他的方法吗?
发布于 2009-05-15 10:27:27
你需要改变你养育孩子的方式。事件“行走”在显示树上。所以你有‘主应用’->‘红色帆布’和‘主应用’>‘绿色画布’。
因此,当您单击绿色画布时,事件永远不会到达红色画布。它将从“主应用程序”转到“绿色画布”&回到“主应用程序”。
您需要做的是让“绿色画布”成为“红色画布”的一个子元素,然后可以将侦听器添加到“红色画布”中,这样就可以侦听从“绿色画布”引发的事件。
如果您这样做,请记住event.target是事件的来源(绿色画布),如果您在“红色画布”内收听,则event.currentTarget将是“红色画布”。
https://stackoverflow.com/questions/867852
复制相似问题