Обратные вызовы функций jQuery и время анимации

Вы можете использовать это:

l = ['a', 'b', 'c']
d = dict((k, [0, 0]) for k in l)
1
задан Benji 4 August 2010 в 20:37
поделиться

1 ответ

Я предполагаю, что часть волнения связана с тем, что вы исчезаете элементы, чьи предки в настоящее время исчезают.

Когда вы что-то исчезаете, оно автоматически затемняет и его потомков, так что вам, вероятно, следует сделать это вместо этого.

$('#content').children().fadeOut(500, function(){
    $('#kiosk').fadeIn(250);
});

Теперь имейте в виду, что обратный вызов с .fadeIn () будет вызываться один раз для каждого элемента , который затемняется. Это тоже может быть проблемой.

Поскольку (предположительно) #kiosk является прямым потомком #content , вы можете напрямую связать fadeIn () на конце. .delay () не требуется.

Попробуйте: http://jsfiddle.net/rrM28/

$('#content').children().fadeOut(500).filter('#kiosk').fadeIn(250);

РЕДАКТИРОВАТЬ: Из вашего обновленного примера в комментарии fadeIn () запускается немедленно, потому что #kiosk изначально скрыт, поэтому анимация для него сразу же завершается, и цепочка продолжается.

Решение состоит в том, чтобы поместить .fadeIn () в анимацию .queue () , чтобы она запускалась только после fadeOut () полный.

Попробуйте: http://jsfiddle.net/rrM28/4

$('#viewer a').click(function(e) {
    e.preventDefault();
           // Don't fadeOut the #kiosk
    $('#content').children(':not(#kiosk)').fadeOut(500)
           // Place the fadeIn of #kiosk in the next step of the animation queue
        .queue(function() {
            $(this).siblings('#kiosk').fadeIn(250).dequeue();
        });
});
2
ответ дан 2 September 2019 в 22:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: