5

更新

js小提琴(更新)在这里

我想知道,拖动元素是否在任何列内?

当我拖动时它对我有用,但当我拖动时Left to right它不起作用right to left

在此处输入图像描述

JS

var isOutside = true;

$('.drag').draggable({
    helper : 'clone',
    drag : function(e, ui){
        if(isOutside)    
           return;
        //here is my code;
    },
});

$('.column').droppable({

    over : function(){
        isOutside = false;
        $('p').text('dragging inside');
    },
    out : function(){
         isOutside = true;
         $('p').text('dragging outside');
    }
});
4

1 回答 1

3

发生这种情况的原因很可能是鼠标没有沿着连续的路径移动,而是跳跃。当你慢慢移动它时,你每次跳跃一两个像素,所以你不会注意到它。当您疯狂地挥舞它时,您可以在两次投票之间跳过 100 多个像素。

由于您的鼠标现在位于其他东西上,因此该事件首先触发是正常的,然后,当浏览器循环赶上时,也会检测到 out 事件。可以说 over 事件的“重要性”更高,因为它是回调(鼠标移动)而不是民意调查(我周围还有什么?)。

如果您希望发生某些事情并取决于这些事件的顺序,我建议您在处理程序中检查是否在处理事件之前采取over了任何out操作over。基本上你这样做:

  1. 在第一次结束事件(变量为空)时保存当前元素。
  2. 在变量不是当前元素的下一个 over 事件中,处理旧元素的 out 事件并将变量设置为当前悬停的元素。
  3. 在 out 事件上处理 out 并将元素设置为 null。

即使实际over发生在前面的事件之前,这也会给你一个强制的事件顺序。

您也可以out仅使用该事件来跟踪鼠标是否离开所有拖放区并在那里进行一些重置。并使用该over事件来处理所有拖放区拖动...

于 2013-03-12T11:41:06.383 回答