2012-09-19 10 views
5

どのCSSアニメーションがJavaScriptで終了したかをどのように検出できますか?JavaScriptで最後に終了したCSSアニメーションを検出しますか?

究極の必要性は、CSSアニメーションを再トリガーすることです。私たちのHTML階層では、要素のクラスをチェックするのではなく、特定のアニメーションが終了したときにのみアクションを取ることを好みます。クラスを削除/追加せずにアニメーションを再トリガーする方法がある場合は、お知らせください。

そうでなければ...私たちのコード:

page.find('.button.letter').on('webkitAnimationEnd', function() { 
     $(this).removeClass('tap_animation'); 

     console.log('Hi: ' + this.style.webkitAnimationName); 

     if (!write_mode()) { 
      do_write(this); 
     } 
    }); 

this.style.webkitAnimationNameは常に空の文字列を返します。

何か間違っていますか?

WebKitブラウザ、特にMobile Safariのコードが必要です。

ありがとうございます!

+0

あなたはループアニメーションをしたい場合は、それがすでにCSS3ではサポートされています

このデモでは、次のHTMLを使用しています。それがあなたが望むものでないなら、あなたはもう少し精巧にできますか? – Shmiddty

+0

アニメーションをループしないで、クラスを削除/追加せずに再トリガーするだけです。私たちはクラスを追加してアニメーションをトリガーし、後で不定な時間を追加し、それを再トリガーする必要があります。クラスの削除/追加が唯一の方法である場合は、ここに記載されている質問を解決する必要があります。 – Crashalot

答えて

4

jQueryのからは、そこから、animationNameプロパティをoriginalEventオブジェクトにアクセスし、することができます。

ここから、ifを使用して、アニメーション名が何であるかを確認してください(過去の時制、私はそれが終了したと仮定します)。

$('div').on('webkitAnimationEnd', function(e){ 
    var animName = e.originalEvent.animationName; 
    if (animName == 'bgAnim') { 
     alert('the ' + animName + ' animation has finished'); 
    } 
});​ 

(Webkit-only) JS Fiddle demo

更新上記は、おそらくより良い図を得ました。

<div><span>text</span></div>​ 

とCSSは:

@-webkit-keyframes bgAnim { 
    0%, 100% { 
     color: #000; 
     background-color: #f00; 
    } 
    50% { 
     color: #fff; 
     background-color: #0f0; 
    } 
} 

@-webkit-keyframes fontSize { 
    0%, 100% { 
     font-size: 100%; 
    } 
    50% { 
     font-size: 300%; 
    } 
} 

div { 
    font-weight: bold; 
    -webkit-animation: bgAnim; 
    -webkit-animation-duration: 2s; 
    -webkit-animation-iteration-count: 2; 
} 

span { 
    font-size: 100%; 
    font-weight: bold; 
    -webkit-animation: fontSize; 
    -webkit-animation-duration: 4s; 
    -webkit-animation-iteration-count: 1; 
} 
+0

あなたはあまりにも素晴らしいですが、あなたとあなたの51.4kポイントはすでにそれを知っています。 :)あなたはクラスを追加/削除せずに(いくつかのユーザーアクションの後で)CSSアニメーションを再トリガーする別の方法を知ることはありませんか? – Crashalot

+0

どうしてありがとう!アニメーションを再開する場合、いいえ。残念ながら、クラスを追加/削除/トグルすることが唯一の方法であると私は思っています。 –

+0

ありがとう、David。私たちには関連する質問があります。私たちはあなたにもその答えを知りたいと思っています:http://stackoverflow.com/questions/12499335/bind-to-custom-css-animation-end-event-with-jquery-or - ジャバスクリプト。チャンスがあれば、私たちはあなたの考えを愛するでしょう! – Crashalot

0

webkitAnimationEndのイベントリスナーが機能するはずです。線に沿って何か:

$('body').on('webkitAnimationEnd', function(e){ 
    var animName = e.originalEvent.animationName; 
    console.log(animName); 
});​ 

(Webkit-only) JS Fiddle demo

$object.addEventListener('webkitAnimationEnd', function(){ 
     console.log('End Detected'); 
    }, false); 
+0

ありがとうございますが、どのアニメーションが終了したかをどのように検出しますか?複数のアニメーションが同じオブジェクトに対して実行されます。 – Crashalot

関連する問題