在Flex中检测alt keyDown键盘事件

时间:2009-11-09 13:46:53

标签: flex actionscript-3 air flash

我正在尝试检测flex中alt键的按键事件。我有一个KeyboardEvent.KEY_DOWN和KeyboardEvent.KEY_UP的标准事件监听器,但是没有得到任何对alt键(或ctrl键)的响应。

我知道我可以检测是否通过鼠标事件按下了alt键,但我想在按下alt键时更新光标以显示它将执行与未按下时不同的动作。

我在Mac上使用Safari进行开发,所以请告诉我是否这是一个孤立的问题。

3 个答案:

答案 0 :(得分:0)

我面前没有Flex环境,但我认为修改键(在您的情况下为Shift,Control和Option)不会发出键盘事件信号。如果我是对的,你仍然可以通过测试每个MouseEvent上的控件和alt键的状态,并根据需要更新游标状态来获得你想要的大部分内容。

它可能也可以在后台连续采样选项键的状态,但我不记得如何在没有接口事件的情况下获得键盘状态。祝你好运。

答案 1 :(得分:0)

试试这个:

component.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler, true );
component.addEventListener( KeyboardEvent.KEY_UP, keyUpHandler, true );

protected function keyDownHandler( event:KeyboardEvent ):void
{
    states[ event.keyCode >>> 3 ] |= 1 << (event.keyCode & 7);
}

protected function keyUpHandler( event:KeyboardEvent ):void
{
    states[ event.keyCode >>> 3 ] &= ~(1 << (event.keyCode & 7));
}

你可以检查一个键是否像这样:

public function isKeyDown( keyCode:uint ):Boolean
{
    return ( states[ keyCode >>> 3 ] & (1 << (keyCode & 7)) ) != 0;
}

答案 2 :(得分:0)

正如stef所指出的,它似乎是Safari中的一个错误。

可以使用JavaScript将事件传递到Flash,但我不确定如果Flash影片有焦点,JavaScript会获取它们。

以下是如何执行此操作的一些示例: javascript to actionscript keypress passing utility?