我应该如何在我的项目中集成jQueryUI可拖动和排序?

问题描述:

我想要将jQueryUI可拖动和排序在我的项目中,并使用mousedown的开始时间和第一个mousemove事件之间的时间差异来区分它们。我的部分代码如下:我应该如何在我的项目中集成jQueryUI可拖动和排序?

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应该是什么或者我的代码有问题。我应该如何解决它?我应该如何在我的项目中集成可拖动和排序?

这是一个预期的行为,要将插件挂接到元素上,必须听取何时会放下插件以及放置在何处。

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

+0

但实际上有很多iPhone或Android应用程序可以将多种行为整合在一起,例如全局拖动,项目拖动,排序等。这些应用程序如何实现这一点?在桌面浏览器中无法实现? – chaonextdoor 2012-04-24 00:00:44

+0

@chaonextdoor,当然,这正是我的观点,拖放和两个行为发生在另一个之后,试图分开它们没有意义吗? – Starx 2012-04-24 04:42:01

+0

对不起,我不知道你为什么总是提到下降。我想在这里集成的是在一个ul元素中拖拽和排序。拖放并不总是随着拖动而去,对吧?这就是为什么jQueryUI有两个分离交互:可拖动和可拖动。您可以一起使用或分开使用它们。全取决于你。 – chaonextdoor 2012-04-24 04:49:43