Вам необходимо добавить флаг, который указывает, находитесь ли вы в режиме перетаскивания или нет.Если пользователь удерживает нажатой в течение определенного времени (например, 300 мсек), установите флаг и затем проигнорируйте событие окончания MOUSE_CLICK
.Обратите внимание, что мы используем тимут в 1 мс в обработчике MOUSE_UP
, чтобы позволить событиям завершиться до сброса флага.Обратите внимание, что вам не нужен обработчик кликов;вы можете вызвать обработчик псевдо-щелчков в вашем 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 мсек, прежде чем даже начинать перетаскивание в первую очередь;это позволит избежать ненужного запуска / остановки операции перетаскивания, когда все пользователи хотят щелкнуть.
Редактировать: Исправлена ошибка в ссылках на имя тайм-аута.