您需要添加一个标志,指定您是否处于拖动模式。如果用户按下一段时间(例如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:如果您直接复制/粘贴了该代码,则出现错误。对超时的引用不正确;我已修复此问题。 –