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

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

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

 var testAnimationInterval = setInterval(function () { if ( ! $('*').is(':animated') ) { // all done animating clearInterval(testAnimationInterval); animationsFinished(); // callback function } }, 300); function animationsFinished() { // do whatever } 

有人找到了更好/不同的方式吗? 特别是在性能方面?

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

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

我认为在动画开始时将元素推送到数组会更有效,并在完成动画时将其从数组中删除。 或者更好的是,在动画开始时增加变量,并在完成时将其减少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); } 

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