2010-08-10 28 views
0

我正在製作自定義滑塊組件。頭(您拖動的東西)編程這樣的:檢測鼠標移動並釋放鎖定的可拖動對象

 head.addEventListener(MouseEvent.MOUSE_DOWN, function():void { 
      head.startDrag(false, new Rectangle(stubDiv,0,width - stubDiv - ((levels-maxLevel)*stubDiv),0)); 
     }); 
     head.addEventListener(MouseEvent.MOUSE_MOVE, function():void { 
      updateLevel(); 
     }); 
     head.addEventListener(MouseEvent.MOUSE_UP, function():void { 
      head.stopDrag(); 
      setHeadPos(); 
     }); 

因爲頭部被限制在滾動條的面積,鼠標可以移動遠離它。如果發生這種情況,該對象仍在被拖動,但它不會收到MOUSE_MOVE事件,如果鼠標被釋放,則不會收到MOUSE_UP事件。

什麼是最好的解決方案?

回答

0

在AS3中,這是處理加入的MouseEvent偵聽到舞臺監聽MOUSE_UP事件。你可以看到,作爲一種風格,我避免在我的事件監聽器中使用匿名函數。這在大多數情況下允許更多的靈活性,並且在我看來,閱讀起來要容易得多。

至於你的其他問題,不具有「滾動柄」反應MOUSE_MOVE事件...你想讓它你已經推出遠離手柄即使仍然會有什麼反應?取決於你希望如何工作,可以通過多種方式完成。

請詳細說明您正在尋找什麼行爲。

1

而是在頭部的MOUSE_MOVE事件調用updateLevel(),把它的頭部的ENTER_FRAME事件:

head.addEventListener(MouseEvent.MOUSE_DOWN, function():void { 
    head.startDrag(false, new Rectangle(stubDiv,0,width - stubDiv - ((levels-maxLevel)*stubDiv),0)); 
    head.addEventListener(Event.ENTER_FRAME, function():void { updateLevel(); }); 
}); 

head.addEventListener(MouseEvent.MOUSE_UP, function():void { 
    head.stopDrag(); 
    head.removeEventListener(Event.ENTER_FRAME, function():void { updateLevel(); }); 
    setHeadPos(); 
}); 

head.Stage.addEventListener(Event.MOUSE_LEAVE, function():void { 
    head.stopDrag(); 
    head.removeEventListener(Event.ENTER_FRAME, function():void { updateLevel(); }); 
    setHeadPos(); 
}); 

我曾在一個類似的功能之前,我還需要處理階段的MOUSE_LEAVE。根據您的要求,您可能還需要添加的MouseEvent.MOUSE_OUT頭