Есть пачка div, при клике анимируется высота (раскрывается на величину окна) и выполняется скролл до выбранного элемента. На первый взгляд работает нормально, но при прокрутке блоки начинают раскрываться вверх. Вследствии чего блок раскрывается, но вот скролл выполняется до верхушки блока в сложенном состоянии.
Вот ссылка на демку:
http://irrodion.ru/portfolio/
кусок html:
<div id="pageWrap">
<?php
for($i = 1;$i <= 10;$i++)
{
echo '<div class="content" id="'.$i.'"></div>';
}
?>
</div>
javascript
:
$(document).ready(function()
{
$(".content").each(function()
{
var id = "#"+this.id;
if(id == "#1")
{
$(id).css({'height':'150px'});
}
});
//Собственно обработка клика
$(".content").click(function()
{
var id = "#"+this.id;
var selectedId = id;
openContent(id);
scrollToContent(id);
$(".content").each(function()
{
var id = "#"+this.id;
var height = $(id).height();
if(height > 150 && id != selectedId)
{
closeContent(id);
}
});
});
});
//Функции
function openContent(id)
{
var height = $(window).height();
$(id).animate({'height':height}, 500, 'swing');
$(id).css({'cursor':'default'});
}
function closeContent(id)
{
if(id == "#1")
{
height = "150px";
}else
{
height = "100px";
}
$(id).animate({'height':height}, 500, 'swing');
$(id).css({'cursor':'pointer'});
}
function scrollToContent(id)
{
$('html, body').animate({scrollTop:$(id).position().top}, 500, 'swing');
}
Конечно, можно запустить функцию scrollToContent в callback анимации, но тогда возникает пауза перед прокруткой, что нежелательно.
Искал на форумах, наших и буржуйских, похожей проблемы не нашел. Подозреваю что нужно отслеживать offset и каким-то образом прикрутить его значения к скроллу, но пока не хватает опыта. Заранее спасибо за помощь!