Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Неправильно считает offsetTop до элемента (https://javascript.ru/forum/dom-window/78823-nepravilno-schitaet-offsettop-do-ehlementa.html)

ofrus 09.11.2019 15:15

Неправильно считает offsetTop до элемента
 
Здравствуйте, столкнулся с такой проблемой:
Задача: Есть плавающий элемент, который нужно зафиксировать при достижении нижней части сайта(в моем случае блока с id "sp-section-6").
Мое решение: Данный код отлично работал:
var stopmove = document.getElementById("sp-section-6").offsetTop;
		$(window).scroll(function() {
			 if ($(window).scrollTop() > stopmove - 200) {
				box.stop().animate({marginTop: topPadding+stopmove - 200}); 
			 }
			else 
				if ($(window).scrollTop() > offset.top) {
				box.stop().animate({marginTop: $(window).scrollTop() - offset.top + topPadding + 150});
			}
			else {
				box.stop().animate({marginTop: topPadding});
			}
		});

Код работал, пока у меня в статьях не было асинхронной загрузки скриптов, которые добавляют контент в статью и увеличивают ее высоту, соответственно, offsetTop вычисляется до загрузки этих скриптов, показывает неправильную высоту статьи, и плавающий элемент фиксируется где-то в середине статьи.
Вопрос: как решить эту проблему?

рони 09.11.2019 15:19

ofrus,
добавить
load = () => stopmove = document.getElementById("sp-section-6").offsetTop;

ofrus 09.11.2019 15:56

Цитата:

Сообщение от рони (Сообщение 515212)
ofrus,
добавить
load = () => stopmove = document.getElementById("sp-section-6").offsetTop;

Спасибо за ответ. Вставил ваш код уже куда только мог, но результат не меняется, отступ все равно считает по старому, куда конкретно его нужно вставить?

рони 09.11.2019 16:06

ofrus,
а перенести строку 1 в строку 2?

ofrus 09.11.2019 16:14

$(window).scroll(function() {
			var stopmove = document.getElementById("sp-section-6").offsetTop;
			load = () => stopmove = document.getElementById("sp-section-6").offsetTop;
			 if ($(window).scrollTop() > stopmove - 200) {
				box.stop().animate({marginTop: topPadding+stopmove - 200}); 
			 }
			else if ($(window).scrollTop() > offset.top) {
				box.stop().animate({marginTop: $(window).scrollTop() - offset.top + topPadding + 150});
			}
			else {
				box.stop().animate({marginTop: topPadding});
			}
		}

Если вы имеете ввиду вот так, то всё равно не работает

рони 09.11.2019 16:53

Цитата:

Сообщение от ofrus
Если вы имеете ввиду вот так,

да но без строки 3.


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