3

セレクターについては知って:animatedいますが、現在、古いIEのパフォーマンスの問題(数少ないものの1つである可能性があります)に直面しています(図を参照)。それは、私が任意のページアニメーションをテストしている方法である可能性があると感じています。

現在、コアテストがである間隔をループしています$('*').is(':animated')。これ$('*')が私が心配していることです...しかし、プラグインの下でアニメーション化されているdiv / etcが何であるかが正確にわからないため、他にどのように行うかわかりません!

var testAnimationInterval = setInterval(function () {

    if ( ! $('*').is(':animated') ) {  // all done animating
        clearInterval(testAnimationInterval);

        animationsFinished();  // callback function
    }
}, 300);

function animationsFinished() {
    // do whatever
}

誰かがこれを行うためのより良い/異なる方法を見つけましたか?特にパフォーマンスに関しては?

4

2 に答える 2

6

すべての jQuery アニメーション タイマーは、配列に格納されます$.timers。1 つのオプションはlength$.timersプロパティが 0 より大きいかどうかを確認することです。

if ($.timers.length > 0) {
    // something is animating
}
于 2013-01-08T15:35:30.690 に答える
0

アニメーションの開始時に要素を配列にプッシュし、アニメーションの終了時に配列から削除する方が効率的だと思います。または、アニメーションの開始時に変数をインクリメントし、終了時に変数を 1 減らします。変数が の場合、0現在実行中のアニメーションはありません。

したがって、いくつかの擬似コード:

var animatingElements = 0;

function animationStart(){ // Add this function in your animation start events;
    animatingElements++;
}

function animationEnd(){ // Add this function  in your animation end events;
    animatingElements--;
}

if (animatingElements === 0) {
    clearInterval(testAnimationInterval);
}

もちろん、これは、アニメーションの開始/終了をキャッチするコードにアクセスできることを前提としています。

于 2013-01-08T15:33:30.620 に答える