2012-07-09 394 views
4

我有一個可拖動像這樣:在jQuery UI中拖延後拖動拖動而不必移動鼠標?

$(".tab li").draggable({ 
    revert: true, 
    delay: 1000, 
    opacity: .75, 
    helper: "clone", 
    appendTo: "body" 
}) 
.bind("dragstart", this.doSomething) 
.bind("dragstop", this.undoSomething); 

所以,按住鼠標一秒鐘後,拖動就可以開始。只要您在1秒後移動鼠標,此工作正常。立即在移動鼠標時,dragstart事件就像它應該發送一樣。我想要的是'dragstart'在1秒後觸發,即使你不拖動鼠標。

我知道我可以做到這一點:

.bind("mousedown", this.setSomeIntervalAndWait) 

,但我需要訪問該作爲的可拖動部分(),所以鼠標按下/鼠標鬆開液將無法創建ui.draggable元素。

這可能沒有修改jQueryUI觸發延遲而不是鼠標移動的事件?我可以使用超時方法破解一些沒有問題的東西,克隆對象,定位它,並在'dragstart'上刪除它,但我希望能減少一些錯誤。

+0

即使用戶沒有拖動,你也想讓dragstart啓動?這沒有多大意義。 – jbabey 2012-07-09 17:53:13

+0

在這種情況下,拖動HAS是因爲他們已經完成了延遲標準,但當然你會比我更瞭解我的應用程序,不是嗎?如果你沒有建設性的答案,不要浪費你的時間,時間和以後可能有同樣問題的人的時間。 – oooyaya 2012-07-09 17:57:46

+0

我想問的是,你試圖用這個新的dragstart功能實現的目標是什麼?也許有一種更簡單的方法,你沒有想到。 – jbabey 2012-07-09 18:02:29

回答

0

答案很簡單。沒有JQuery UI的可拖動的交互不支持,所以你需要修改JQuery UI,或者做一些你已經暗示的事情。除非你知道這是你經常重複使用非常的,否則我會選擇後者。我會說,實現類似的最好方法是使用bind(1.7之前版本)或on(之後版本1.7)在JQuery中實現自定義事件處理程序。你甚至可以實現你自己的JQuery plug-in實現draggable,但增加了你的事件。

讓我知道你是否想要比這更多的細節,或者如何編寫這樣一個插件的例子。

+0

是的 - 好的。那是我所想的。我想這是一樣好。我不認爲它會經常被重複使用,所以我會放下一些額外的事件來模擬「拖動」。 – oooyaya 2012-07-09 18:04:33

6

在最新的JQuery UI Draggable中,現在有一個delay選項。查看demo