检测页面上的任何内容是否正在设置动画

时间:2013-01-08 15:28:20

标签: javascript jquery animation jquery-animate

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

目前我正在循环一段时间,核心测试为 $('*').is(':animated') 。这个 $('*') 是我所担心的...但是因为我不知道在我的插件下动画的div / etc是什么,我不确定怎么做呢!

var testAnimationInterval = setInterval(function () {

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

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

function animationsFinished() {
    // do whatever
}

有没有人找到更好/不同的方法呢?特别是在性能方面?

2 个答案:

答案 0 :(得分:5)

所有jQuery动画计时器都存储在数组$.timers中。一种选择是检查length属性的$.timers是否大于零:

if ($.timers.length > 0) {
    // something is animating
}

答案 1 :(得分: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);
}

这是假设您可以访问启动/捕捉动画结束的代码。