【问题标题】:Tracking mouse outside of window in desktop-based app?在基于桌面的应用程序中跟踪窗口外的鼠标?
【发布时间】:2012-10-02 19:52:11
【问题描述】:

我离开一段时间后将返回 Flex/AIR,所以这可能是一个非常基本的问题。

我有一个基于窗口的桌面 AIR 应用程序。它有一个侧边栏/控制面板类型的功能,在用户将鼠标 X 移动到舞台/窗口左侧 220,它就会隐藏。简单。

我遇到了一个愚蠢的问题,用户可以将鼠标太快地向左移动,越过窗口的左侧,而我打开侧边栏的例程不会被调用。我尝试过单独或组合使用 ENTER_FRAME、MOUSE_MOVE 和 MOUSE_OUT,但仍然很容易让侧边栏例程失败。

this.stage.addEventListener(Event.ENTER_FRAME, controlPanelDisplayHandler);
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, controlPanelDisplayHandler);
this.stage.addEventListener(MouseEvent.MOUSE_OUT, controlPanelDisplayHandler);

在我显示/隐藏侧边栏的例程中,我看到了 ENTER_FRAME 事件的痕迹,但它保留了在鼠标离开窗口之前它知道的最后一个 mouseX 位置,而不是桌面矩形内的当前鼠标位置.

我似乎记得在这方面有一些安全问题,但已经有一段时间了。谁能建议我可以完成这个简单功能的方法?

private function controlPanelDisplayHandler(event:Event):void
{
trace("mouseX" + this.stage.mouseX);

if (sidebarDisplayed == false){
    if (mouseX <= 5){ 
        sidebarDisplayed = true;
        showSidebar();  
    }
} else if (sidebarDisplayed == true){

    if (mouseX >= 240){
        sidebarDisplayed = false;
        hideSidebar();  
    }
}

【问题讨论】:

标签: apache-flex air flex4 flex4.5


【解决方案1】:

也是 Flex 的新手,可能没有帮助,但您尝试过 Event.MOUSE_LEAVE 吗?

可能会给你同样的问题,不确定。

【讨论】:

  • 感谢您的建议!我刚刚尝试过,但结果相同:快速移动鼠标,事件似乎没有触发。啊。愚蠢的小事,应该很容易。希望明天我能以新的眼光看到我在做一些愚蠢的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多