Smooth Scroll — это библиотека для плавной прокрутки страницы к якорным ссылкам. Когда на странице используется несколько независимых навигационных элементов или блоков с прокруткой, важно правильно создавать и управлять множественными экземплярами библиотеки, чтобы они не конфликтовали друг с другом и корректно работали независимо.
Каждый экземпляр Smooth Scroll можно создать для конкретного набора ссылок. Например:
import SmoothScroll from 'smooth-scroll';
// Основная навигация
const mainScroll = new SmoothScroll('.main-nav a', {
speed: 600,
offset: 50,
});
// Боковое меню
const sidebarScroll = new SmoothScroll('.sidebar-nav a', {
speed: 400,
offset: 20,
});
Ключевые моменты:
speed, offset, easing и
т.д.).Smooth Scroll возвращает объект экземпляра, который содержит методы для управления прокруткой:
scroll.animateScroll(target, anchor, options) —
инициирует прокрутку к элементу.destroy() — удаляет обработчики событий и очищает
экземпляр.cancelScroll() — останавливает текущую анимацию.Пример использования нескольких экземпляров с программным вызовом прокрутки:
// Прокрутка к конкретному элементу в основной навигации
mainScroll.animateScroll(document.querySelector('#section1'));
// Прокрутка через боковое меню
sidebarScroll.animateScroll(document.querySelector('#widget2'));
Основные причины конфликтов:
scroll-behavior у
html/body.Рекомендации для предотвращения конфликтов:
scroll.isAnimating).Разные блоки на странице могут требовать различной скорости, смещения или кривой анимации:
const heroScroll = new SmoothScroll('.hero-links a', {
speed: 800,
easing: 'easeInOutCubic',
offset: 100,
});
const footerScroll = new SmoothScroll('.footer-links a', {
speed: 400,
easing: 'linear',
offset: 10,
});
speed отвечает за длительность
прокрутки.easing — функция плавности (например,
easeInOutCubic, linear,
easeOutQuad).offset позволяет учитывать
фиксированные элементы (шапку, плавающие панели).Если элементы навигации появляются динамически (через AJAX или SPA):
function initDynamicScroll(selector) {
return new SmoothScroll(selector, {
speed: 600,
offset: 50,
});
}
// После загрузки новых блоков
const dynamicScroll = initDynamicScroll('.dynamic-nav a');
Каждый экземпляр можно настраивать через колбэки:
before: вызывается перед началом прокрутки.after: вызывается после завершения анимации.Пример с несколькими экземплярами:
const firstScroll = new SmoothScroll('.first a', {
speed: 500,
before: function (anchor, toggle) {
console.log('Начало прокрутки первого блока');
},
});
const secondScroll = new SmoothScroll('.second a', {
speed: 700,
after: function (anchor, toggle) {
console.log('Завершение прокрутки второго блока');
},
});
animateScroll,
destroy и cancelScroll позволяют управлять
любым экземпляром отдельно.Правильное создание и управление несколькими экземплярами Smooth Scroll обеспечивает стабильную, плавную и предсказуемую прокрутку даже на сложных страницах с множеством навигационных элементов.