0

しばらく離れてからFlex/AIRに戻るので、これは非常に基本的な質問かもしれません。

ウィンドウベースのデスクトップAIRアプリがあります。サイドバー/コントロールパネルタイプの機能があり、ユーザーがマウスXをステージ/ウィンドウの左側の5ピクセル未満に移動するまで非表示になります。次に、サイドバーが表示されている場合、ユーザーがマウス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イベントの痕跡が表示されますが、デスクトップrect内の現在のマウス位置ではなく、マウスがウィンドウを離れる前に認識した最後の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();  
    }
}
4

1 に答える 1

0

Flexも初めてで、役に立たないかもしれませんが、試しましたEvent.MOUSE_LEAVEか?

ただし、同じ問題が発生する可能性がありますが、わかりません。

于 2012-10-02T23:34:35.983 に答える