Como eu adicionei alguma scrollTop
animação, algumas partes do meu retorno de chamada são chamadas duas vezes:
$('html, body').animate({scrollTop: '0px'}, 300,function() {
$('#content').load(window.location.href, postdata, function() {
$('#step2').addClass('stepactive').hide().fadeIn(700, function() {
$('#content').show('slide',800);
});
});
});
Parece apenas repetir o .show()
, pelo menos não tenho a impressão de que o load()
ou também .fadeIn()
seja chamado uma segunda vez. O .show()
é repetido assim que termina pela primeira vez. A propósito, definir a velocidade da animação scrollTop para 0
não ajudou!
Presumo que tenha algo a ver com a fila de animação, mas não consigo descobrir como encontrar uma solução alternativa e, especialmente, por que isso está acontecendo.
html, body
. É hora de ligar meu cérebro novamente. Obrigadohtml
é necessário para o IE e o retorno de chamada será acionado duas vezes para a maioria dos outros navegadores. Estou tentando encontrar uma solução para o mesmo problema.var ranOne = false; $('body,html').animate({ scrollTop: scrollTo }, scrollTime, 'swing', function () { if (ranOne) { ...action... ranOne = false; } else { ranOne = true; } });
Parece hacky, mas ter que usar "body, html" é meio hacky em primeiro lugar, então. (ech desculpe pela falta de quebras de linha, acho que os comentários não as mostram)Para obter um único retorno de chamada para a conclusão de animações de vários elementos, use objetos adiados.
Consulte a API jQuery para obter uma descrição detalhada de Promise and Deferred Objects .
fonte