2012-07-01 21 views
13

Bir makale öğesinde bir CSS3 geçiş efekti uygularım ancak olay dinleyicisi geçişi yalnızca jQuery ile değil, salt JavaScript'te çalışır.CSS3 geçiş olayı jQuery ile Dinleyici

// this works 
this.parentNode.addEventListener('transitionend', function() {alert("1"); }, true); 

// this does not work 
$(this).parent().addEventListener('transitionend', function() {alert("1"); }, true); 

birileri yanlış yapıyorum bana ne açıklayabilir:

Aşağıdaki örneğe bakın? İlki gerçekten (bir satıcı öneki gerektirir gerekir çünkü Sanmam) çalışırsa

$(this).parent().bind('transitionend', function() {alert("1"); }); 

cevap

19

Eğer bind() veya on() yöntem kullanmalıdır

$(this).parent().on('transitionend', function() { 
    alert("1"); 
}); 
+4

Tam uyumluluk için, satıcı öneki olayları da eklemelisiniz. [Http://blog.teamtreehouse.com/using-jquery-to-detect-when-css3-animations-and-transitions-end](http://blog.teamtreehouse.com/using-jquery-to-detect adresine bakın. -when-css3-animasyonlar-ve-geçişler-sonu) detaylar için. –

1

, o zaman bu çok çalışması gerekir:

jQuery
4

this.parentNode, javascript nesnesini döndürür. Bir jQuery nesnesi .addEventListener $(this).parent() döndürür. Bu

$(this).parent().on('webkitTransitionEnd oTransitionEnd transitionend msTransitionEnd', function() { 
    alert("1"); 
}) 
23

Ayrıca not almak yerine bu deneyin bir özellik .addEventListener

yok Birden transitionEnd geri aramalar alırsınız Eğer bir öğe üzerinde birden geçişleri çalıştırıyorsanız (mesela. Donukluk ve genişlik) .

Bir konunun bir div geçişine sonlandırmak için jQuery kullanıyorsanız, one() işlevini kullanmayı düşünebilirsiniz.

$(this).parent().one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend", function() { 
    // your code when the transition has finished 
}); 

Bu, kodun yalnızca ilk kez tetikleneceği anlamına gelir. Yani, aynı element üzerinde dört farklı geçişiniz olsaydı, geriçağırımınız sadece bir kez ateşlenir.

+0

Bu "bir" veya "açık" mı? – fboes

+1

'one()' işlevini kullanmak yalnızca bir olay yakaladığınızdan emin olur. – graygilmore

+0

e.currentTarget öğesinin uygun öğe olup olmadığını kontrol etseniz iyi olur; çünkü 'geçişi', çocuğunun herhangi bir animasyonu için ebeveyne de ateş eder. – venimus