@smithana

Как зафиксировать при прокрутке сайдбар с динамически изменяющейся высотой?

Добрый день.

Задача на первый взгляд простая.
При прокрутке экрана до конца сайдбара, фиксируем сайдбар.

Реализовал просто:
var $sidebar = $('aside'),
	footerOffset = $('footer').outerHeight() + 50,
	asideHeight = $sidebar.outerHeight() + $sidebar.offset().top + footerOffset + 5;

		$(window).scroll(function(){

			if ($(window).width() > 1019){
                             //Сайбар есть только на ПК разрешении
				var scroll = $(window).scrollTop() + $(window).height();
				
				if (scroll > asideHeight){
					$sidebar.css('position', 'fixed');				
				} else {
					$sidebar.css('position', '');
				}
			}
		});

И вроде бы оно работает, но не всегда.

Загвоздка заключается в том, что в сайдбаре есть блоки, контент которых создаёт сторонний скрипт, например график гугловской аналитики.
Соответственно при загрузке страницы сайдбар имеет одну высоту, а когда загрузятся все сторонние скрипты, высота сайдбара увеличивается.

Я перенёс данную функцию из $(document).ready в $(window).on("load"), стало лучше, но всё равно иногда бывает скрипты грузятся дольше, чем картинки на сайте.

За что можно зацепиться? Не хочется нагружать страницу постоянным пересчётом высоты сайдбара.
Отслеживать когда в динамических блоках скрипты нарисуют контент тоже не хочется, т.к. на разных страницах блоки в сайдбаре разные. Под все сложно подстроиться.

Спасибо!
  • Вопрос задан
  • 775 просмотров
Пригласить эксперта
Ответы на вопрос 1
@smithana Автор вопроса
нашёл вот такое интересное решение.
www.backalleycoder.com/2013/03/18/cross-browser-ev...

Суть в том, что небольшой скрипт добавляет в элемент object и вешает listener на изменение его размера.
Работает на ура, с одним единственным косяком. В IE даже 10-ом, object имеет рамку. которую мне не удалось убрать ни какими стилями(
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
08 нояб. 2024, в 21:09
8000 руб./за проект
08 нояб. 2024, в 20:58
1000 руб./за проект
08 нояб. 2024, в 20:30
10000 руб./за проект