В настоящее время я работаю над плавной прокруткой, нажимая на якорь с "#".
Мой код в настоящее время выглядит следующим образом:
(function() {
let getElementOffset = (el) => {
const rect = el.getBoundingClientRect();
return {
top: rect.top + window.pageYOffset,
left: rect.left + window.pageXOffset,
};
};
let anchors = document.getElementsByClassName('js-scroll');
Array.from(anchors).map(function(anchor) {
anchor.addEventListener('click', function(event) {
event.preventDefault();
history.pushState({}, "", this.getAttribute('href'));
window.scrollTo({ top: getElementOffset(document.getElementById(this.getAttribute('href').substr(1))).top, behavior: 'smooth' });
});
});
})();
<a class="js-scroll" href="#buy">Buy</a>
<img class="lazy" data-src="path/to/image" src="placholder.png" />
<div id="buy">
content to scoll to
</div>
Прокрутка отлично работает на страницах без отложенной загрузки изображений или когда изображения уже загружены.
Я знаю, в чем проблема:в тот момент, когда я нажимаю на якорь, положение прокрутки отличается от момента прокрутки.В данный момент я прокручиваю изображения, загружаемые через ленивую загрузку и x-шнур для прокрутки к изменениям.
Как я могу обнаружить новый правый x-шнур для прокрутки до?