如何在上一个(未知)动画/效果完成后在jQuery中运行代码?

时间:2011-10-27 19:53:09

标签: javascript jquery

我希望在之前的效果/动作完成后隐藏DIV元素。如果我知道序列,我可以将代码添加到我给.animate()的回调函数中(例如)。但是在这种情况下,我无法访问该状态(它可能会也可能不会通过动画/效果)。因此,两个动画/效果由两个不同的事件(例如按钮点击)触发。

所以我会在DIV元素完成当前动画/效果后运行fadeOut。这可以用jQuery吗?

感谢。

编辑:所以目标是将当前动作(例如fadeOut())与前一动画代码分离。

EDIT2:让问题更清晰。

5 个答案:

答案 0 :(得分:2)

只需拨打.fadeOut(),它就会自动添加到fx队列的末尾:

http://jsfiddle.net/gilly3/f4vNH/

答案 1 :(得分:0)

您必须向我们展示以前的动画代码才能获得具体建议。在jQuery中,动画效果可以链接在一起,jQuery会自动将它们一个接一个地排队。或者,您可以使用一个操作的完成功能来触发下一个操作的开始。

示例:

$("#item").fadeIn(1000).delay(1000).fadeOut(500);
$("#item").animate({
    opacity: 0.75,
    left: '+=250',
 }, 5000).delay(1000).fadeOut(500);

.animate()方法还有一个完成功能,可以在动画完成时用来触发任何操作,但如果下一个操作本身是一个动画,则更容易使用上面的自动链接而不是完成功能:

$("#item").animate({
    opacity: 0.75,
    left: '+=250',
 }, 5000, function() {alert("Animation finished."});

答案 2 :(得分:0)

我认为你正在寻找动画调用中的完整函数参数:

http://api.jquery.com/animate/

$('#clickme').click(function() {
  $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Animation complete.
  });
});

答案 3 :(得分:0)

如何使用live()创建自定义事件并绑定它?

<script>
$("p").live("myCustomEvent", function(e, myName, myValue) {
  $('#div').hide();

});
$("button").click(function () {
  $("p").trigger("myCustomEvent");
});
</script>

答案 4 :(得分:0)

这很简单,只需将动画排队

$("#myDiv").queue(function(){
    $(this).fadeOut();
});

它将在动画队列完成后执行。 因此,您可以在动画队列之后和fadeOut之前添加代码并执行任何操作...