1

我正在进行拖放,当可拖动对象通过我为屏幕设置的某些限制时,我想将其返回到其原始位置。

我的问题是,如果 onmousedown 事件处于活动状态,则对象在调用 onmouseup 事件之前不会返回其原始位置。

是否可以在运行时取消或停止 mousedown?

4

4 回答 4

1

当满足特定条件时,您可以清除 mousemove 事件:

function trackMouse(e) {
    if (e.pageX > 200 || e.pageY > 200) {
        // stop execution (event continues to run)
        // alternatively, to detach this event:
        $(window).off('mousemove', trackMouse);
    } else {
        $('#output').html(e.pageX +', '+ e.pageY); 
    }
}

$(window).on('mousemove', trackMouse);​

演示(JSLint)

于 2013-01-02T15:21:23.203 回答
0

听起来您应该使用 onmousemove-event 来查看是否已达到限制,但正在使用 onmousedown,正如您所说,在您释放鼠标按钮之前不会触发。按下鼠标按钮时仅触发一次

于 2013-01-02T15:11:01.270 回答
0

也许您会发现这个jquery.event.drag插件很有用。它允许您在拖动过程中取消拖动。从它的文档:

每次鼠标移动时,此事件都会在“draginit”和“dragstart”之后触发。处理程序可以返回 false 以停止拖动交互并直接进入“dragend”并防止任何“drop”事件。如果拖动多个元素(来自“draginit”),此事件将在每个元素上唯一触发。

于 2013-01-02T15:28:21.810 回答
0

@Voitek Zylinski:您的解决方案有效,但我终于发现这个解决方案在我的情况下更好:

$(document).trigger("mouseup");

谢谢你。

于 2013-01-02T16:11:46.047 回答