Есть вот такой код:
$(".spoiler").click(function() {
$(".spoiler").each(function() {
if ($(this).next().is(":visible") == true) {$(this).next().slideUp("slow");}
});
switch ($(this).next().is(":hidden")) {
case true:
$(this).next().slideDown("slow");
var offset = $(this).offset();
var height = $(this).outerHeight(true);
$("body, html").animate({scrollTop: (offset.top - height)}, "slow");
break;
case false:
$(this).next().slideUp("slow");
break;
}
return false;
});
Здесь можно увидеть, как работают сейчас эти спойлеры (потыкайте по разным заголовкам). Когда спойлер открывается, страница должна проскроллиться к его началу. Это работает, но зачастую скролл срабатывает до того, как полностью развернется спойлер. Из-за этого страница остается почти в том же положении, в каком была.
Как я понимаю, это происходит из-за асинхронности выполнения строк кода. Как можно сделать так, чтобы скролл выполнялся ТОЛЬКО после того, как спойлер развернется или, по крайней мере, чтобы страница передвигалась синхронно со спойлером и оказывалась в его начале?