Добрый день. На сайте есть простенький ротатор баннеров, написанный с помощью jQuery. Структура имеет следующий вид:
<div class="banners">
<img src="/images/{{ info.banners[0].image_name }}" alt="{{ info.banners[0].name }}">
<div class="hidden_banners">
{% for banner in info.banners %}
<img src="/images/{{ banner.image_name }}" alt="{{ banner.name }}">
{% endfor %}
</div>
</div>
Понятно, что из базы выводятся все баннеры в скрытый див, а первый баннер показывается.
jQuery код, сменяющий эти баннеры:
function changeBanner() {
var $banner = $('.banners > img'),
background = $banner.attr('src'),
$nextBanner = $('.hidden_banners img[src="' + background + '"]').next(),
$firstBanner = $('.hidden_banners img:first'),
src = $nextBanner.attr('src') || $firstBanner.attr('src'),
alt = $nextBanner.attr('alt') || $firstBanner.attr('alt');
$('.banners').css({'background': 'url(' + background + ')', 'background-size': '100%'});
$banner.fadeOut(100, function() {
$(this).attr({'src': src, 'alt': alt}).fadeIn(800);
});
}
window.setInterval(changeBanner, 5000);
Тоже вроде бы все понятно. Теперь о проблеме: ротатор должен быть резиновый, получается, что высоту для .banners нам задавать не нужно. И все бы ничего, но только если высота не задана и мы находимся на странице ниже ротатора, то при смене баннеров у нас страница "подпрыгивает" вверх, так как получается, что после fadeOut изображения нет на долю секунды и этого хватает, чтобы наблюдать такой неприятный баг. А если задать высоту, то, соответственно, не получится масштабировать данный блок. Пробовал перед скрытием баннера выставлять у .banners высоту, равную высоте изображения, а после появления сбрасывать, но почему-то проблема остается. Собственно, как можно выйти из положения?