2018-2020 чисті js:
Є дуже зручний спосіб прокрутки до елемента:
el.scrollIntoView({
behavior: 'smooth', // smooth scroll
block: 'start' // the upper border of the element will be aligned at the top of the visible part of the window of the scrollable area.
})
Але наскільки я розумію, він не має такої гарної підтримки, як наведені нижче варіанти.
Дізнайтеся більше про метод.
Якщо необхідно, щоб елемент знаходився вгорі:
const element = document.querySelector('#element')
const topPos = element.getBoundingClientRect().top + window.pageYOffset
window.scrollTo({
top: topPos, // scroll so that the element is at the top of the view
behavior: 'smooth' // smooth scroll
})
Демонстраційний приклад на Codepen
Якщо ви хочете, щоб елемент знаходився в центрі:
const element = document.querySelector('#element')
const rect = element.getBoundingClientRect() // get rects(width, height, top, etc)
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
window.scroll({
top: rect.top + rect.height / 2 - viewHeight / 2,
behavior: 'smooth' // smooth scroll
});
Демонстраційний приклад на Codepen
Підтримка:
Вони пишуть, що scroll
це той самий метод, що і scrollTo
, але підтримка виявляється краще вscrollTo
.
Детальніше про метод
<a href="#anchorName">link</a>