The HTML code:
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
</ul>
The js code:
<script type="text/javascript">
$(document).ready(function() {
var lis = $("li");
for (var i = 0; i < lis.length; i++) {
$(lis[i]).animate({opacity: 0}, 1000);
}
});
</script>
I just find that the lis will disappear together. How can I do that they will disappear one by one?
Hold down the Ctrl key and click all the objects that you want to animate together. They don't have to be touching each other, and it's all right if they're mixed in with things that you don't want to animate.
Sorry for joining the party late.
The existing answers have issues when a timer blocks and rely on the accuracy of timers, moreover they require an actual delay.
jQuery actually provides a generic way to perform animations sequentially with promises:
$(document).ready(function() {
var lis = $("li");
var queue = $.Deferred().resolve(); // create an empty queue
lis.get().forEach(function(li){
queue = queue.then(function(){
return $(li).animate({opacity: 0}, 1000).promise();
})
});
});
Fiddle
Note that this will work even if you assign them different animation durations or different animations, the result in queue
will contain a hook on when the last animation finished. This also supports aggregations (waiting for all promises to finish in parallel) and more.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With