Finora abbiamo visto animazioni, anche su più proprietà, che però avvengono simultaneamente. E se invece volessi metterle in coda? Cioè farle eseguire una dopo l'altra?
JQuery supporta il chaining: posso eseguire cioè metodi a cascata
Esempio:
$(document).ready(function() {
$('div.label').click(function() {
$('div.button')
.fadeTo('slow',0.5)
.animate({left: 650}, 'slow')
.fadeTo('slow',1.0)
.slideUp('slow');
});
});
Sequenza di animazioni:
NB: non si possono mettere in coda metodi d'effetto e animazione con metodi non d'animazione. Quindi se scrivessi:
$(document).ready(function() {
$('div.label').click(function() {
$('div.button')
.fadeTo('slow',0.5)
.animate({left: 650}, 'slow')
.fadeTo('slow',1.0)
.css('backgroundColor','#f00');
});
});
Il background dei bottoni, pur essendo l'ultimo metodo eseguito, cambiarebbe immediatamente.
Si possono animare anche più set di elementi allo stesso tempo. Voglio fare in modo che quando clicco su un paragrafo questo scompare e appare il successivo con un effetto di animazione di tipo slide:
$(document).ready(function() {
$('p:eq(3)').css('backgroundColor', '#fcf').hide();
$('p:eq(2)').css('backgroundColor', '#cff').click(function() {
var $thisPara = $(this);
$thisPara.slideUp('slow').next().slideDown('slow');
});
});
Dunque come si gestiscono le precedenze su metodi non d'effetto? Per mezzo delle callback:
$(document).ready(function() {
$('p:eq(3)')
.css('backgroundColor', '#fcf')
.hide();
$('p:eq(2)')
.css('backgroundColor', '#cff')
.click(function() {
var $thisPara = $(this);
$thisPara.next().slideDown('slow',function() {
$thisPara.slideUp('slow');
});
});
});
Tale funzione è detta callback
Es. Callback sample