如何在右键击下事件的Flex Panel外部获取鼠标位置?

时间:2012-10-10 06:51:05

标签: flex

我正在创建一个Flex面板,上面有一个图像。我已将图像的“buttonMode”和“useHandCursor”属性设置为true。因此,每当我执行鼠标操作时,光标将变为手形工具。我可以在其上设置鼠标右键,鼠标右键,鼠标移动事件。但是,我发现鼠标移动事件无法正常工作。

例如,当用户右键单击Flex面板中的图像然后在Flex面板外拖动鼠标(向下鼠标右键)时,我想在用户拖动鼠标时获取鼠标的当前位置。 但如果我在鼠标上做同样的事情,那么一切正常。任何人都可以指导我为什么我无法在鼠标右键单击中这样做?

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您使用的是MOUSE_DOWN - > MOUSE_MOVE - >在MOUSE_UP过程中,你可以使用它。它最初用作想要平稳拖放的人的答案。你可以看到答案here

import flash.display.*;
import flash.events.*;


var startX:Number;
var startY:Number;
var shape:Sprite = new Sprite();
shape.graphics.beginFill(0x000000);
shape.graphics.drawRect(0,0,50,50);
shape.graphics.endFill();
this.addChild(shape);

shape.addEventListener(MouseEvent.MOUSE_DOWN,this.mouseDown);

function mouseDown(e:MouseEvent = null):void{
    stage.frameRate = 60;
    startX = stage.mouseX - shape.x;
    startY = stage.mouseY - shape.y;
    stage.addEventListener(MouseEvent.MOUSE_MOVE,this.mouseMove);
    shape.addEventListener(MouseEvent.MOUSE_UP,this.mouseUp);
}

function mouseMove(e:MouseEvent = null):void{
    shape.x = stage.mouseX - startX;
    shape.y = stage.mouseY - startY;
}

function mouseUp(e:MouseEvent = null):void{
    shape.removeEventListener(MouseEvent.MOUSE_UP,this.mouseUp);
    stage.removeEventListener(MouseEvent.MOUSE_MOVE,this.mouseMove);
    stage.frameRate = 24;
}

基本上,要完成您想要的操作,必须将MOUSE_MOVE事件侦听器附加到舞台,而不是Panel或Image。您在图像上侦听MOUSE_DOWN(或右键单击),然后添加MOUSE_MOVE和MOUSE_UP事件。我的帧率变化是不必要的,但是为了获得原始提问者想要的平滑拖动而需要。我也补偿了该代码中对象内的鼠标位置。关键是肯定要将MOUSE_MOVE事件添加到舞台并监听stage.mouseX和stage.mouseY,而不是将其添加到Panel或图像并侦听target.mouseX / mouseY或event.localX / localY。

我认为这不是用于移动设备,但如果是,并且您使用的是强制DPI,请确保使用FlexGlobals.topApplication.systemManager.mouseX / mouseY而不是stage.mouseX和stage.mouseY。 SystemManager类考虑了DPI更改,而Stage类没有。