2011-08-08 154 views
0

我有一個MouseEvent.CLICK偵聽器的按鈕。當按下按鈕時觸發CLICK事件,鼠標在推出時關閉,然後在再次按下按鈕時釋放。我不希望發生這種情況,拖動按鈕時不應發生點擊事件。AS3:拖放按鈕

我的Flash文件包含大量的按鈕和點擊偵聽器,我想用盡可能少的代碼來解決這個問題。這個問題最簡單的解決方案是什麼?

回答

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

在鼠標下方,記錄鼠標座標,在鼠標上做相同的操作並比較兩個座標。如果距離超過10px(或任何你想要的),則取消點擊(或將布爾值設置爲false,以允許點擊偵聽器中的代碼運行)。

在按下鼠標,開始記錄鼠標座標,所以你知道剪輯已被移動,然後在鼠標彈起時,你知道,如果剪輯已被移動,即使用戶將剪輯回完全一樣的地方。

+0

如果用戶拖出按鈕,然後巧合返回到他拖出的完全相同的座標?你的解決方案非常簡單,但我需要更好的東西。 – Abdulla

+0

@Abdulla,我編輯了我的答案。 – Griffin