我知道: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
}
有没有人找到更好/不同的方法呢?特别是在性能方面?
答案 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);
}
这是假设您可以访问启动/捕捉动画结束的代码。