Javascript setInterval занимает слишком много времени для сброса

Эй, у меня есть панель (br_Panel), которая содержит четыре элемента div с классом smallPanel и идентификатором br_Panel1, br_Panel2 и т. Д., Которые имеют одинаковый и одинаковый размер и расположены друг над другом. Когда функция запускается, каждые 5 секунд она затухает и показывает нижнюю, а когда все они исчезают, все возвращаются с fadeIn. Проблема в том, что пауза между постепенным исчезновением последнего div и постепенным исчезновением для всех из них составляет 15 секунд, то есть в три раза больше времени, которое требуется каждому div для выхода. Как я могу уменьшить эту паузу во время сброса до 5 секунд?

setInterval(function() {
    if(i < 0) {
        $('#br_Panel').find($('.smallPanel')).fadeIn();
        i = 5;
    }
    else
        i--;
    $('#br_Panel').find($('#br_Panel' + i)).fadeOut();
}, 5000);

Это html (если это помогает, каждый из самых внутренних div'ов позиционируется абсолютно как #br_Panel, так что они перекрывают друг друга):

<div class="height1 panel" id="br_Panel">
    <div class="smallPanel" id="br_Panel1">content</div>
    <div class="smallPanel" id="br_Panel2">content</div>
    <div class="smallPanel" id="br_Panel3">content</div>
    <div class="smallPanel" id="br_Panel4">content</div>
</div>

1 ответ

Решение

Вы упомянули, что ваш br_Panel содержит четыре элемента div с классом smallPanel, но ваша функция интервала будет запущена шесть раз, прежде чем i сбрасывается (5, 4, 3, 2, 1, 0). Может случиться так, что ваша функция работает в 2 раза больше, чем нужно, что приводит к тому, что ваша задержка будет на 10 секунд дольше, чем должна быть.

В качестве дополнительного примечания, при использовании.find() вам нужно только передать используемый вами селектор строки css, а не объект enter jQuery:

$('#br_Panel').find('.smallPanel').fadeIn();
Другие вопросы по тегам