Smooth Scroll — библиотека для плавного скроллинга, которая позволяет управлять анимацией перехода к якорям на странице. Одним из ключевых аспектов точного позиционирования при скролле являются смещения (offsets) и отступы (padding), которые позволяют корректировать конечное положение элемента в области просмотра.
Смещение определяет разницу между верхом видимой области окна
и верхом целевого элемента. Это особенно важно, если на
странице присутствует фиксированная шапка (header) или
другой элемент, который перекрывает контент.
Пример настройки смещения:
const scroll = new SmoothScroll('a[href*="#"]', {
offset: 100, // смещение в пикселях
speed: 600,
speedAsDuration: true
});
offset: 100 — после завершения анимации верх целевого
элемента будет находиться на 100 пикселей ниже верхнего края окна.offset может быть
положительным (смещение вниз) или
отрицательным (смещение вверх).Иногда фиксированная шапка может иметь изменяемую высоту (например, при адаптивном дизайне). В этом случае лучше использовать функцию для динамического вычисления смещения:
const scroll = new SmoothScroll('a[href*="#"]', {
offset: function (anchor, toggle) {
const header = document.querySelector('.header');
return header.offsetHeight; // высота шапки в пикселях
},
speed: 800,
speedAsDuration: true
});
anchor — целевой
элемент, toggle — элемент ссылки.Если скроллинг выполняется не по всей странице, а по определённому
контейнеру с прокруткой (overflow: auto), важно правильно
учитывать padding контейнера. Например:
const container = document.querySelector('.scrollable');
const scroll = new SmoothScroll(container, {
offset: 20, // дополнительный отступ внутри контейнера
speed: 500
});
offset здесь учитывает внутренние отступы
контейнера.scrollTop и clientTop контейнера.Для адаптивных сайтов иногда требуется изменять смещение в зависимости от ширины экрана. Можно использовать медиазапросы прямо в функции:
const scroll = new SmoothScroll('a[href*="#"]', {
offset: function () {
if (window.innerWidth < 768) {
return 50;
} else {
return 120;
}
},
speed: 700
});
Некоторые CSS-свойства могут влиять на визуальное смещение элемента:
margin-top и padding-top у целевого
элемента увеличивают визуальный отступ при скролле.position: fixed) требуют
добавления дополнительного offset, чтобы элемент не
перекрывался.scroll-margin-top в CSS может быть
альтернативой JavaScript-смещения:section {
scroll-margin-top: 80px; /* компенсирует фиксированную шапку */
}
element.scrollIntoView({ beh * avior: 'smooth' }).Smooth Scroll позволяет выполнять действия после завершения анимации с учётом смещения:
const scroll = new SmoothScroll('a[href*="#"]', {
offset: 100,
speed: 600,
after: function (anchor, toggle) {
console.log('Скролл завершен для элемента:', anchor.id);
}
});
after вызывается после того, как анимация
завершена.padding) и
внешних (margin) у контейнеров.scroll-margin-top как дополнение или
альтернативу для простых случаев.Смещение и отступы — это ключевой инструмент контроля точного
позиционирования при плавной прокрутке. Правильная настройка
offset позволяет добиться максимальной читаемости и
удобства навигации на сайте.