为什么在按下鼠标中键时没有发送MOUSE_MOVE事件?

时间:2012-03-08 01:39:20

标签: actionscript-3 air mouseevent

我正在侦听MOUSE_MOVE事件。

除非按住鼠标中键,否则它们会被发送和接收。在中间按钮被释放之前,我不再获得MOUSE_MOVE事件。

这是Flash的问题,还是与我的特定鼠标/电脑配置有关(狮子座上的蓝牙Mighty Mouse)?

是否有任何已知的解决方法?


这是一个展示问题的示例项目 左键单击并拖动跟踪鼠标移动事件,但中间单击仅显示鼠标中键和鼠标中键。

import flash.events.MouseEvent;

this.stage.addEventListener(MouseEvent.MIDDLE_MOUSE_DOWN, onMiddleMouseDown);
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);

function onMiddleMouseDown(e:MouseEvent):void {
trace("middle down");

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.addEventListener(MouseEvent.MIDDLE_MOUSE_UP, onMiddleMouseUp);
}

function onMouseMove(e:MouseEvent):void {
trace("mouse move");
}

function onMiddleMouseUp(e:MouseEvent):void {
trace("middle up");

this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.removeEventListener(MouseEvent.MIDDLE_MOUSE_UP, onMiddleMouseUp);
}

function onMouseDown(e:MouseEvent):void {
trace("down");

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}

function onMouseUp(e:MouseEvent):void {
trace("up");

this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
this.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}

更新
按住中间按钮时,似乎没有更新鼠标位置(mouseX和mouseY属性)。我仍然想知道为什么,或者是否有解决方法。

3 个答案:

答案 0 :(得分:0)

只是一个猜测,但通常在大多数驱动程序中设置鼠标中键以启用滚动。可能意味着当按下按钮时,窗口会取代鼠标移动消息而不会显示某种滚动消息。

答案 1 :(得分:0)

你绝对需要MOUSE_MOVE活动吗?大多数情况下,ENTER_FRAME事件可以很好地替换它。

addEventListener(Event.ENTER_FRAME, eFrame);
private function eFrame(event:Event):void
{
   trace(mouseX,mouseY);
}

答案 2 :(得分:0)

看起来这是Flash Player for Mac中的一个错误 Adobe修复了它:
https://bugbase.adobe.com/index.cfm?event=bug&id=3674152