2011-08-08 10 views
0

MouseEvent.CLICKリスナーを持つボタンがあります。 CLICKイベントは、ボタンが押されたときにトリガーされ、マウスがロールアウトされている間は押し下げられ、ボタンに再度ロールインされると解放されます。これが起こりたくない場合は、ボタンがドラッグされているときにクリックイベントが発生してはなりません。AS3:ドラッグアンドドロップボタン

私のフラッシュファイルには大量のボタンとクリックリスナーが含まれていますので、可能な限り小さなコードでこの問題を解決したいと思います。この問題の最も簡単な解決策は何ですか?

答えて

3

必要なときにイベントリスナーとハンドラーを追加し、不要になったときにそれらを削除する必要があります。あなたのニーズに合わせて独自のロジックを使用していますが、ここでは一例ですます:

button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler); 

function mouseDownEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.addEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Mouse Down"); 
} 

function mouseUpEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.removeEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Mouse Click (Mouse Up)"); 
} 

function rollOutEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.removeEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Roll Out"); 
} 

あなたが同じように動作するのボタンをたくさん持っている場合、あなたはすべてのボタンは以下のようになりそのカスタムボタンクラスを作成する必要がありますインスタンス。

+0

+1最終点です。 – Marty

1

マウスがダウンしたら、マウスの座標を記録し、マウスの上に同じ操作を行い、2つの座標を比較します。距離が10px(または任意のもの)以上の場合は、クリックをキャンセルします(または、クリックリスナー内のコードを実行できるようにfalseに設定します)。

または

ダウンマウスで

、あなたがクリップが移動されている知っているので、クリップは、ユーザーがクリップを背面に配置しても、移動された場合、その後、マウスアップ時に、あなたが知っている、マウス座標の記録を開始まったく同じ場所。

+0

ユーザーがボタンからドラッグして、偶然に彼がドラッグした座標と同じ座標に戻るとどうなりますか?あなたのソリューションはエレガントにシンプルですが、私はより良いものが必要です。 – Abdulla

+0

@Abdulla、私は私の答えを編集しました。 – Griffin