Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как включить синхронное выполнение строк? (https://javascript.ru/forum/dom-window/27831-kak-vklyuchit-sinkhronnoe-vypolnenie-strok.html)

SkaN 26.04.2012 13:54

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

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

Gvozd 26.04.2012 22:28

у slideDown есть второй аргумент - он вам и нужен


Часовой пояс GMT +3, время: 04:14.