Możecie mi wyjaśnić dlaczego po funkcji setTimeout(animacja(),2000); nie wykonuje się żadna akcja a dokładniej chodzi mi o to aby po kliknięciu na link np. costam najpierw wykonał sie skrypt w jquery a potem aby przeszło do adresu.Więc zamieniłem atrybut href na “name” i pobieram go do zmiennej attr_name i po animacji chcę aby przeszło do adresu. Animacja się wykonuje ale do adresu już nie przychodzi mimo ze pobiera go prawidłowo, wogóle nawet jak dam prostego alerta po setTimeout to sie nie wywoła, dlaczego? Jak to zrobić?
$(document).ready(function() {
$("#menu2 li").click(function(){
var attr_name = $(this).find('a').attr('name');
setTimeout( animacja(), 2000 );
location.href =attr_name;
});
function animacja(){
$(".left_column").animate({'width':'0px'});
}
});
Nazwa funkcji w metodzie setTimeout musi być podana w cudzysłowach
Sama funkcja powinna być zdefiniowana poza $(document).ready(function() {}
No i chyba najważniejsze, nawet jak poprawisz powyższe to kod i tak nie będzie działał, ponieważ po przerwie zostanie wywołana funkcja animate(), ale natychmiast po niej zostanie wywołane przekierowanie, więc nie zobaczysz animacji, bo nie zdąży się wykonać
Moja rada:
Metoda JQuery animate() pozwala na wywołanie funkcji po wykonaniu się animacji, trzeba ją podać jako ostatni argument, a w metodzie setTimeout można zamiast nazwy funkcji skorzystać z funkcji anonimowej. Dzięki temu możemy skorzystać z kodu: