2011-05-06 17 views
7

İlk soruyu durdurmak, böylece olmak tür :)jQuery sürüklenebilir haline döndüğünü ve olay

Ne yapmaya çalışıyorum kullanıcı sürüklenebilir salıveren bir fonksiyon aramak ve Geri döndürme animasyonu tamamlanmadan önce.

Gördüğüm kadarıyla durma olayı yalnızca geri dönüş bittiğinde çağrılır. Sürüklenebilir seçeneğe bir işlev aktarmayı denedim, ancak işe yaramıyor. İşte benim göstereceğim kodum biraz. Daha sonra eleman dışarı kaybolur fakat geri gelmez - fadeout -

$("a").draggable({ 
    helper:function(){ 
     return $("<div/>",{id:"mydrag",text:"link"}).appendTo("body"); 
    }, 
    revert:function(evt,ui){ 
     // $("#mydrag").fadeOut("slow"); 
     return true; 
    }, 
    stop:function(evt,ui){ 
     console.log("fin"); 
    } 
}); 

Ben Geri döndürme işlevi ilk satırı yorumsuz. Konsol, geri dönüş animasyonu tamamlandığında sadece "fin" i kaydeder.

Bana yardım eden var mı? Bir cevap için çok fazla Googled olduğumu söylemeye gerek yok, ama şanssız.

Buster

cevap

11

İlk olarak, this blog göre, kayıt dışı revert geri arama tek bir bağımsız değişken (damla yuva nesne veya damla reddedilen Boole false) alır.

Şimdi, sorun, yardımcı programını yeniden konumlandırmak için draggable'un animate()'u dahili olarak kullanmasıdır. Görünüşe göre, bu animasyon kuyruğa giriyor ve sadece fadeOut etki bitiminden sonra başlıyor. İstediğinizi elde etmek

bir yolu bu gibi animate() kendinizi çağrı yapmaktır:

anda geri ediliyor ise sürüklenebilir yardımcı fade out sağlar
revert: function(socketObj) { 
    if (socketObj === false) { 
     // Drop was rejected, revert the helper. 
     var $helper = $("#mydrag"); 
     $helper.fadeOut("slow").animate($helper.originalPosition); 
     return true; 
    } else { 
     // Drop was accepted, don't revert. 
     return false; 
    } 
} 

.

Bu çözümü here test edebilirsiniz.

+0

Teşekkürler, bu çok yardımcı oluyor. Geri dönüş çağrısı neden belgesiz kalıyor? Aslında, jquery UI belgelerinin genel olarak jQuery çekirdeğine kıyasla neden bu kadar fakir olduğunu merak ediyorum. Tekrar teşekkürler! – BusterLuke

+1

doğru yolda, ancak originalPosition çağırmak, gerçekten, jsfiddle ile bile hiçbir şey döndürmez. Bu kısmı nerede bulacağınızdan emin değilsiniz çünkü .animate (undefined) terimi aslında hiçbir şey yapmaz. Geri döndürme animasyonu, aslında geri arama işlevinizden doğru olarak geri dönmenin bir sonucudur. Temel olarak, kodunuzun yaptığı şey, animasyonun 'kuyruklandırması' atlanarak, geri çağırma işlevinize koymak için seçtiğiniz diğer animasyonlarla eşzamanlı olarak çalışmasına izin vermesi ve ardından gerçek geri dönmesidir. Sonuç: Bunu kaldır .animate ($ helper.originalPosition); – mkralla11

+0

@Mike, kesinlikle haklısınız, "$ helper.originalPosition", "revert" etkinliği sırasında gerçekten 'undefined'. Ancak, çağrının "animasyonlu (undefined)" olarak kaldırılması, "yerinde" tersine çevrilmeden ve kaybolmadan öğenin sonucunu verir. Burada kesinlikle gölgeli bir şey var. –

İlgili konular