2010-05-20 41 views
0

好吧,只要您的鼠标实际上在物品上或它的一个孩子身上,那么mouseOver和RollOver以及它们各自的输出效果都很好。我的问题是,我可能有另一个UI组件“之间”我的鼠标和我想要处理鼠标/滚动(可能是一个按钮是在画布的顶部,但不是画布的孩子)的项目。鼠标仍然在组件上,还有其他的东西在同一时间结束。我需要一个真正的mouseOver

任何提示或帮助如何处理?如果我不够清楚,请告诉我。

下面是一个简单的代码示例,详细说明我的问题复制/粘贴到您的Flex/Flash Builder中,你会明白我的意思: 编辑,我只是​​做这个比较复杂和真实的我的实际问题,拖慢慢的,如果进一步移动鼠标比它有点打破单个帧按钮,但也只是在这个简化版本

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="500" height="268" 
       creationComplete="ccInit()"> 
    <mx:Script> 
     <![CDATA[ 
      private var btnStartX:Number = 10; 
      private var btnStartY:Number = 218; 
      private var msStartX:Number = 0; 
      private var msStartY:Number = 0; 


      private function ccInit():void{ 
       myCanv.addEventListener(MouseEvent.ROLL_OVER,handleRollOver); 
       mybutton.addEventListener(MouseEvent.MOUSE_DOWN,startDragOp); 
      } 
      private function handleRollOver(evt:MouseEvent):void{ 
       myCanv.setStyle("backgroundAlpha",1); 
       myCanv.addEventListener(MouseEvent.ROLL_OUT,handleRollOut); 
       mybutton.mouseEnabled = false; 
       mybutton.focusEnabled = false; 
       mybutton.mouseFocusEnabled = false; 
       mybutton.mouseChildren = false; 
      } 
      private function handleRollOut(evt:MouseEvent):void{ 
       myCanv.setStyle("backgroundAlpha",0); 
       myCanv.removeEventListener(MouseEvent.ROLL_OUT,handleRollOut); 
       mybutton.mouseEnabled = true; 
       mybutton.focusEnabled = true; 
       mybutton.mouseFocusEnabled = true; 
       mybutton.mouseChildren = true; 
      } 
      private function startDragOp(evt:MouseEvent):void{ 
       btnStartX = mybutton.x; 
       btnStartY = mybutton.y; 
       msStartX = stage.mouseX; 
       msStartY = stage.mouseY; 
       mybutton.addEventListener(MouseEvent.MOUSE_MOVE,moveWithMouse); 
       mybutton.addEventListener(MouseEvent.MOUSE_UP,endDragOp); 
      } 
      private function moveWithMouse(evt:MouseEvent):void{ 
       mybutton.x = btnStartX + stage.mouseX - msStartX; 
       mybutton.y = btnStartY + stage.mouseY - msStartY; 
      } 
      private function endDragOp(evt:MouseEvent):void{ 
       mybutton.x = 10; 
       mybutton.y = 218; 
       mybutton.removeEventListener(MouseEvent.MOUSE_MOVE,moveWithMouse); 
       mybutton.removeEventListener(MouseEvent.MOUSE_UP,endDragOp); 
      } 
     ]]> 
    </mx:Script> 

    <mx:Canvas id="myCanv" x="10" y="10" width="480" height="200" borderStyle="solid" borderColor="#000000" backgroundColor="#FFFFFF" backgroundAlpha="0"> 

    </mx:Canvas> 
    <mx:Button id="mybutton" x="10" y="218" label="Drag me over above canvas" width="326" height="36"/> 
</mx:Application> 
+0

我前面的例子太简单了,这新的更准确的我遇到的问题。 – invertedSpear 2010-05-21 15:58:25

回答

1

有性能屈指可数,你可以用它来实现这一点:

mouseEnabled mous eFocusEnabled focusEnabled mouseChildren

在'hovered'组件上将它们全部设置为false,它下面的组件应该接收相关事件。

尽管如此,这会阻止您使用存在于您想要关注焦点的组件之上的组件。

添加代码示例演示问题性质

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="500" height="226" 
       creationComplete="ccInit()"> 
<mx:Script> 
    <![CDATA[ 
     private function ccInit():void{ 
      myCanv.addEventListener(MouseEvent.ROLL_OVER,handleRollOver); 
     } 
     private function handleRollOver(evt:MouseEvent):void{ 
      myCanv.setStyle("backgroundAlpha",1); 
      myCanv.addEventListener(MouseEvent.ROLL_OUT,handleRollOut); 
     } 
     private function handleRollOut(evt:MouseEvent):void{ 
      myCanv.setStyle("backgroundAlpha",0); 
      myCanv.removeEventListener(MouseEvent.ROLL_OUT,handleRollOut); 
     } 
    ]]> 
</mx:Script> 

<mx:Canvas id="myCanv" x="10" y="10" width="480" height="200" borderStyle="solid" 
      borderColor="#000000" backgroundColor="#FFFFFF" backgroundAlpha="0"> 

</mx:Canvas> 
<mx:Button x="90" y="50" label="Button" width="327" height="100" 
      mouseEnabled="false" mouseFocusEnabled="false" focusEnabled="false" mouseChildren="false" /> 
</mx:Application> 
+0

谢谢,我会尝试一些。但需要注意的是,我们并不是在谈论按钮是画布的一个孩子,它更像是在画布的顶部,他们只是在同一个空间。 – invertedSpear 2010-05-20 21:49:25

+0

没有任何作品。 – invertedSpear 2010-05-20 21:54:34

+0

也许你需要分享一些代码,这样我们才能更好地理解你的问题。 – JeffryHouser 2010-05-20 22:47:39