jQuery .unload() игнорирует fadeOut и пропускает

Прежде всего, извините за двойной вопрос, но я чувствую, что это несколько иная манера.

У меня есть:

$(document).ready(function(){
        $('#container').fadeOut(0);
        $('#container').fadeIn(500);

        $(window).unload(function(){
            alert("Hello.");
            $('#container').fadeOut(500);
        });
    });

Он должен отображать страницу, затухая, и заставлять ее выгружаться, затухая. Хотя, когда я закрываю страницу или отправляю форму, которая находится на ней, я вижу только предупреждение, но после того, как я нажимаю на нем OK, страница просто исчезает и появляется следующая. Затухание не выполняется.

Как я могу это исправить?


person Gabriele Cirulli    schedule 09.03.2011    source источник
comment
Лучше: $('#container').hide().fadeIn(500);   -  person Šime Vidas    schedule 09.03.2011
comment
Что вам нужно, так это синхронное затухание. fadeOut сам по себе этого не сделает, потому что он асинхронный.   -  person Šime Vidas    schedule 09.03.2011


Ответы (2)


Все, что вызывается при выгрузке, должно быть синхронным. Я считаю, что метод fadeOut вызывает несколько асинхронных обратных вызовов. Поэтому, когда вы вызываете fadeOut, настраивается несколько обратных вызовов для последующего создания анимации. Однако разгрузка не ждет.

Ознакомьтесь с этим вопросом, чтобы самостоятельно создать анимацию.

person Jordan    schedule 09.03.2011
comment
@Jordan Вопрос в том, как я могу это исправить? - person Šime Vidas; 09.03.2011
comment
Это должно работать, но как заставить анимацию выполняться только тогда, когда требуется выгрузка? Помещение анимации внутри вызова выгрузки даст тот же результат. - person Gabriele Cirulli; 09.03.2011
comment
Я не знаю, как заставить анимацию работать синхронно. Я думаю, вам придется написать свою собственную функцию, которая изменяет непрозрачность. - person Jordan; 09.03.2011
comment
Да, но мне все еще нужен способ поймать, когда страницу нужно выгрузить, не выгружая ее, пока я не закончу. - person Gabriele Cirulli; 09.03.2011
comment
Все, что вы поместите в функцию, переданную unload, будет выполняться по порядку. Так что пока вы не вызываете асинхронную функцию, вам не о чем беспокоиться. По сути, вам нужно их несколько по порядку... $('#container').css('opacity','0.9') каждый с меньшей непрозрачностью. Тем не менее, вы должны кэшировать элемент jQuery в переменной, чтобы вы не пересекали DOM каждый раз. - person Jordan; 09.03.2011

Теперь для этого есть обратный вызов [, complete ] (1.0+):

http://api.jquery.com/fadeOut/#fadeOut-duration-complete

person JoeBrockhaus    schedule 03.12.2014