Desenvolvimento

11 mai, 2011

Stop Animações com JQuery: evite efeitos indesejados

Publicidade

Neste artigo, você vai acompanhar como evitar efeitos indesejados em stop animações com JQuery. Acompanhe cada método e seus parâmetros, solucionando problemas e executando comandos.

Invocando a função animate

Por default, as animações com JQuery são colocadas em fila. Essas filas são tratadas internamente pelo objeto fx, o que significa que todas as vezes que uma função animate é invocada, ela entra em uma fila e executará o comando. Em alguns contextos, isso pode ser muito ruim.

Um cenário simples pode ser denominado em um menu, onde de usa animação no evento mouseover, ou mouselive. Ao passar o mouse sobre a cada item do menu, a função animate será executada em fila. Se não usamos o comando .stop() e passamos alguns parametros à essa função, poderemos ter efeitos indesejados.

Sintax do método stop

element.stop(clearQueue, jumpToEnd)

Este método aceita dois parâmetros booleanos, que por padrão é definida como false. O primeiro parâmetro limpa a fila da animação. Em vez disso, o segundo parâmetro força a animação atual ser concluída antes de parar. Veja como fica uma animação sem o tratamento de .stop():

Clique aqui e veja sem o método stop [ Menu-sem-Stop.html ]

$(function () {
$('#menu ul li').hover(function () {
$(this)
.find('ul')
.slideDown(500);
},
function () {
$(this)
.find('ul')
.slideUp(200);
});
});

Observe que a animação não para a cada vez que o mouse é colocado sobre algum item do menu. Veja que, com a simples adição de uma linha, esse problema é resolvido:

$(function () {
$('#menu ul li').hover(function () {
$(this)
.find('ul')
.slideDown(100);
},
function () {
$(this)
.find('ul')
.stop(true, true)
.slideUp(100);
});
});

Clique aqui e veja o efeito do menu corretamente [ Menu-Stop.html ]

Confira mais informações sobre .stop() na API do JQuery. Compartilhe seus testes e mande seu feedback através dos comentários para compartilhamos novos métodos. Até a próxima!