如果检测到任何页面上正在动画(Detecting if Anything on the Page i

2019-07-18 00:12发布

我知道的:animated选择,但目前正在到(可能是什么数之一)老年IE的(去图)性能问题。 我觉得这可能潜在地是我测试的任何网页动画的方式。

目前我通过循环的间隔,与核心测试是$('*').is(':animated')$('*')是我很担心......但因为我不知道exaclty的div /等都正在动画低于我的插件是什么,我不知道怎么回事做到这一点!

var testAnimationInterval = setInterval(function () {

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

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

function animationsFinished() {
    // do whatever
}

有没有人发现,这样做的更好/不同的方式? 特别是当它涉及到性能?

Answer 1:

所有的jQuery动画定时器存储在阵列$.timers 。 一种选择是只是为了检查是否length$.timers属性大于零:

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


Answer 2:

我觉得动画开始时,它会更有效你的元素推到一个数组,当它完成动画从阵列中删除。 或者更好的是,增加对动画开始的变量,并通过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);
}

这是,假设你有机会到启动当然/映入你的动画结束,该代码。



文章来源: Detecting if Anything on the Page is being Animated