Показать сообщение отдельно
  #1 (permalink)  
Старый 26.04.2012, 13:54
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Как включить синхронное выполнение строк?
Есть вот такой код:
$(".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;
});

Здесь можно увидеть, как работают сейчас эти спойлеры (потыкайте по разным заголовкам). Когда спойлер открывается, страница должна проскроллиться к его началу. Это работает, но зачастую скролл срабатывает до того, как полностью развернется спойлер. Из-за этого страница остается почти в том же положении, в каком была.
Как я понимаю, это происходит из-за асинхронности выполнения строк кода. Как можно сделать так, чтобы скролл выполнялся ТОЛЬКО после того, как спойлер развернется или, по крайней мере, чтобы страница передвигалась синхронно со спойлером и оказывалась в его начале?
Ответить с цитированием