3

我知道:animated选择器,但目前正在遇到(可能是少数几个)旧 IE 的性能问题(如图)。我觉得这可能是我测试ANY Page Animation的方式。

目前我正在循环一个区间,核心测试是$('*').is(':animated'). 这$('*')就是我担心的......但由于我不知道在我的插件下面动画的 divs / 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。一种选择是检查length属性$.timers是否大于零:

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 回答