2011-08-09 48 views
8

他们的方式来检测元素是否动画或检测元素的值是否正在改变?jQuery动画检测是否动画?

因为我需要触发一个功能,如果一个元素是动画。不完整的动画。当所选择的元素制作动画

+0

什么时候触发? –

回答

21

下面返回true:

var isAnimating = $("#someid").is(':animated'); 

的更多细节:

http://api.jquery.com/animated-selector/
和/或
http://api.jquery.com/animate/
步骤:的函数被称为a过了动画的每一步。

+0

安迪请我只是澄清我对伪选择器的理解:动画。我看到的行为是,一旦元素开始动画,即使元素已经返回到起始点,(:animated)也是如此。因此,我使用步骤来检测动画何时到达动画位置。有没有办法来打开和关闭伪选择器? – codepuppy

+0

@codepuppy这很奇怪,我在这里做了一个测试:http://jsfiddle.net/aPk3y/1/它返回正确的值。我不认为有一个简单的操作方法:直接动画。 – Andy

+0

安迪感谢这个例子。好吧,我可以看到它适合你。所以我必须在某个地方犯错。我会回去再次检查我的测试。 – codepuppy

1

一个简单的方法就是添加一个全局布尔值,一旦动画开始,它就会被设置为true。然后,您将一个回调函数添加到该动画,并在完成后将其设置为false

var running = false; 

$('#start').click(function(){ 

    running = true; 

    $('#target').animate({opacity: 0.5},'slow',function(){ 

     running = false; 

    }); 

}); 

编辑:哦,我猜是有一个选择器。

+1

如果您使用此方法,请注意您如何使用它,因为在特殊情况下可能会导致竞争状况。例如:'1。点击开始按钮(1) - running = true - t = 0ms''2。点击开始按钮(2) - running = true - t = 200ms''3。动画(1)结束 - running = false - t = 600ms''4。动画(2)running - running = false - 600ms

0

因为我需要触发一个函数,如果一个元素是动画。不完整的动画。

由于$(element).on(":animated", function(){ ... });似乎不工作,我能看到的唯一方法是非常简单地执行你想,当你执行你的动画调用该函数:

$(selector).animate(. . .); 
functionToCall(); //called with animate above 

另一种解决办法,就是你可以创建自己的库来处理启动动画,并且在开始以上述简单方式开始动画之后处理调用必要的功能。

所以只是一些伪代码:

var animation = new MyAnimationLibrary(function() { $(selector).animate(...) }); 
animation.onStart.push(function() { 
    alert('animation starts'); 
}); 
//then later in the code: 
animation.start(); 

然后,只需作出上述呼吁的阵列animation.onStart的功能和触发动画。