我应该如何在我的项目中集成jQueryUI draggable和sortable?

时间:2012-04-23 23:25:14

标签: javascript jquery jquery-ui jquery-ui-sortable jquery-ui-draggable

我想在我的项目中集成jQueryUI draggable和sortable,并使用mousedown和first mousemove事件的开始时间之间的时间差来区分它们。我的部分代码如下:

var deltaX = self.mouse.startX - event.pageX,
    deltaY = self.mouse.startY - event.pageY;
if (self.mouse.mousedownTime - self.mouse.mousemoveTime < 700){                   
                // Drag down
                if(Math.abs(deltaX) < Math.abs(deltaY) && deltaY < 0){
                    $(self.el).draggable({disabled: false});
                    $(self.el).sortable({disabled: true});
                    $(self.el).draggable({axis: 'y'});
                    $(self.el).draggable({revert: true});
 ....
}
// Sorting action
else {
            $(self.el).sortable({disabled: false});
            $(self.el).draggable({disabled: true}); // global dragging
            $(self.el).sortable({containment: $(self.el).closest('.content')});
        }

但事情并非我的预期。每次我开始拖动元素时,firebug中显示的html都有正确的可拖动/可排序类设置,但它对当前的拖动事件无效。例如,当您第一次拖动时,虽然html已经具有相应的类设置,但该元素既不可拖动也不可排序。第二次拖动它时,它将是可拖动的或可排序的。如果您为当前拖动事件设置可拖动/可排序元素,则它仅在您下次拖动时才有效。

总之,您期望当前事件的可拖动/可排序事件仅对下一个事件有效。我想知道这是jQueryUI应该是什么,或者我的代码有错误。我该如何解决?我应该如何在我的项目中集成可拖动和可排序?

1 个答案:

答案 0 :(得分:0)

这是一种预期的行为,要将插件挂钩到元素上,它必须在它被删除时以及它将被拖动的位置进行侦听。

通常这两个插件并排工作。所以我不认为有一种方法可以做到这一点,而不会使元素只能拖动,因为无论如何都需要拖动droppable。