2012-07-01 12 views
13

アーティクル要素にCSS3トランジションエフェクトを実装していますが、イベントリスナトランジションはjQueryではなく、純粋なJavaScriptでのみ動作します。CSS3トランジションイベントjQueryを使用するリスナー

以下の例を参照してください:

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

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

を誰かが私が間違って何をやっている私を説明できますか?

あなたが bind()または on()方法使用する必要がありますjQueryので

答えて

19

:最初のものは、実際に(それがベンダー接頭辞を必要としなければならないので、私はそれを疑う)動作する場合、これはあまりにも動作するはず

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

完全な互換性を得るには、ベンダープレフィックス付きのイベントも含める必要があります。 [http://blog.teamtreehouse.com/using-jquery-to-detect-when-css3-animations-and-transitions-end](http://blog.teamtreehouse.com/using-jquery-to-detect)を参照してください。 -when-css3-animations-and-transitions-end)を参照してください。 –

1

を:

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

this.parentNodeは、javascriptオブジェクトを返します。それはプロパティを持っています.addEventListener $(this).parent()は、jQueryオブジェクトを返します。それは

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

にも注意してください取る、代わりにこれを試してみてくださいプロパティ.addEventListener

を持っていないことをあなたが複数のtransitionEndコールバックを買ってあげるあなたが要素に複数のトランジションを実行している場合(例えば不透明さと幅) 。

jQueryを使用してイベントをdivの遷移先にバインドする場合は、1つの()関数を使用することを検討してください。

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

これはコードが初めて起動することを意味します。したがって、同じ要素で4つの異なるトランジションが発生した場合、コールバックは1回だけ発生します。

+0

'one'か' on'ですか? – fboes

+1

'one()'を使用すると、1つのイベントしかキャプチャしないようになります。 – graygilmore

+0

e.currentTargetが適切な要素であるかどうかを確認することをお勧めします。これは、 'transitionend'がその子のアニメーションの親に対しても起動するためです。 – venimus