您需要添加一個標誌,指定您是否處於拖動模式。如果用戶按下一段時間(例如300毫秒),則設置標誌並且隨後忽略結束MOUSE_CLICK
事件。請注意,我們在MOUSE_UP
處理程序中使用1毫秒timoute來讓標誌重置之前的事件完成。還要注意,你並不需要點擊處理程序;您可以在MOUSE_UP
處理程序中調用僞點擊處理程序,如果dragInProgress==false
。
private var dragTime:int = 300;
private var dragInProgress:Boolean = false;
private var dragInProgressInt:int;
function handleMouseDown(event:MouseEvent):void
{
dragInProgressInt = setTimeout(function():void
{
dragInProgress = true;
}, dragTime);
// Start drag, etc.
}
function handleMouseUp(event:MouseEvent):void
{
clearTimeout(dragInProgressInt);
setTimeout(function():void
{
dragInProgress = false;
}, 1);
// End drag, etc.
}
function handleMouseClick(event:MouseEvent):void
{
if (!dragInProgress)
{
// Handle the real click
}
}
合乎邏輯的下一步是等待, 300毫秒之前,甚至開始拖動首先;當所有用戶想要點擊時,這將避免不必要的拖動操作的開始/停止。
編輯:更正超時名稱引用中的錯誤。
謝謝。這可能會訣竅。首先,我想創建自己的MOUSE_UP/_MOVE/_DOWN處理程序(不使用startDrag/stopDrag)。我想聽到其他人的想法:) – MaRmAR
實際上這可以工作,但有時用戶只是不停地拖動欄,所以點擊事件觸發,因爲他們在閱讀時不斷觸摸屏幕。這會導致CLICK事件的意外火災:( – MaRmAR
@MaRmAR:如果您直接複製/粘貼了該代碼,則出現錯誤。對超時的引用不正確;我已修復此問題。 –