I can't use callbacks because I have a scenario like this (pseudo-code):
$('.box').on('click', function() {
$('.expanded-box').animate({
// shrink it
});
$(this).animate({
// grow it
$(this).addClass('expanded-box');
});
});
I can't put the expansion animation within the callback for the expanded-box
growth animation because it may not always happen. But I need the second animation to wait till the previous one is done. How can I do this?
You can encapsulate the second animation's code in a function and then call that function from the callback of the first animation or call it if the first animation doesn't happen. Assuming the idea is to shrink some other control that had the "expanded-box" class from a previous click:
Demo: http://jsfiddle.net/PXddm/
Since jQuery 1.6, you can use promise() to obtain a Promise object that will be resolved when all animations on a given element have completed. In addition, the documentation says:
Therefore, it's well-suited to your use case, and you can write: