0

我想要將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應該是什麼或者我的代碼有問題。我應該如何解決它?我應該如何在我的項目中集成可拖動和排序?

回答

0

這是一個預期的行爲,要將插件掛接到元素上,必須聽取何時會放下插件以及放置在何處。

通常這兩個插件並排工作。所以我不認爲有一種方法可以做到這一點,而不會使元素只能拖動,因爲無論如何都需要拖拽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

相關問題