flash as3 - startDrag的事件监听器,stopDrag?

mhe*_*ers 2 flash events actionscript-3 drag

我希望能够区分是否拖动或单击了影片剪辑,并相应地执行不同的功能.问题是startMrag由MOUSE_DOWN启动,而MOUSE_UP启动stopDrag,每次都会触发CLICK事件.我想要做的是,在click事件的条件中,说出"if dragging == true {do something}"之类的内容

我想我可以在mouse_up或mouse_down函数中设置一个标志,但问题是mouse_down与鼠标点击同时发生.我需要能够在实际的stopDrag()函数中设置标志.我已经看到了一个涉及设置超时的解决方案 - 我想避免这种情况.有任何想法吗?

Bad*_*his 5

我曾经多次处理过的事情.

我所做的是在捕获阶段创建一个额外的CLICK监听器(优先级高于你正在使用的任何其他东西),然后在该处理程序上,如果你知道它是一个拖动你停止事件的传播 - 那么它不会无法访问任何其他点击处理程序.

因此,在您的情况下,如果您正在使用startDrag(我使用自己的自定义拖动例程),您可以执行以下操作:

function myFuntionThatStartsTheDrag() {
    myDragObject.startDrag();
    myDragObject.addEventListener(MouseEvent.CLICK,suppressClick,true,9999,true);
}

function suppressClick(e:MouseEvent):void {
    e.stopPropagation();
}

function myFunctionThatStopsTheDrag() {
    myDragObject.stopDrag();
    myDragObject.removeEventListener(MouseEvent.CLICK,suppressClick,true);
}
Run Code Online (Sandbox Code Playgroud)