Smooth Scroll — это современная библиотека для плавной прокрутки страницы, которая изначально создавалась как чисто Vanilla JavaScript решение. Однако в проектах, где уже используется jQuery, часто возникает необходимость интегрировать Smooth Scroll с существующим кодом, написанным на этой библиотеке. Правильная интеграция требует понимания особенностей работы jQuery с событиями и манипуляциями DOM.
В классическом подходе Smooth Scroll инициализируется через вызов конструктора:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
speedAsDuration: true,
offset: 50,
});
Если проект использует jQuery, важно учитывать, что селекторы jQuery
возвращают объекты jQuery, а Smooth Scroll ожидает NodeList или
строковый селектор. Для корректной интеграции нужно
использовать метод .get(), чтобы преобразовать
jQuery-объект в массив DOM-элементов:
const links = $('a[href*="#"]').get();
const scroll = new SmoothScroll(links, {
speed: 600,
easing: 'easeInOutCubic',
});
Ключевой момент: без метода .get()
Smooth Scroll не сможет корректно обработать jQuery-объекты, и прокрутка
работать не будет.
jQuery предоставляет удобный синтаксис для назначения обработчиков
событий, который иногда используют вместо стандартного
addEventListener. Smooth Scroll создает собственные события
scrollStart и scrollStop, которые могут быть
перехвачены через jQuery следующим образом:
$(document).on('scrollStart', function(event, anchor, toggle) {
console.log('Прокрутка началась к:', anchor);
});
$(document).on('scrollStop', function(event, anchor, toggle) {
console.log('Прокрутка завершена к:', anchor);
});
Важная особенность: события Smooth Scroll не
привязаны к конкретным DOM-элементам, а распространяются через
document. Это отличает их от стандартных jQuery-событий на
элементах.
Если ссылки создаются динамически после загрузки страницы, обычная инициализация Smooth Scroll может не работать. Для этого нужно повторно инициализировать библиотеку или использовать делегирование событий через jQuery:
$(document).on('click', 'a[href*="#"]', function(event) {
const scroll = new SmoothScroll();
scroll.animateScroll(this);
event.preventDefault();
});
Преимущество этого подхода в том, что каждая новая ссылка автоматически получает функциональность плавной прокрутки, независимо от времени добавления в DOM.
Иногда проекты используют анимации jQuery, например
.animate(), параллельно с Smooth Scroll. Чтобы избежать
конфликтов:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 500,
after: function(anchor, toggle) {
$(anchor).fadeIn(400);
}
});
Ключевой момент: Smooth Scroll завершает анимацию полностью, только тогда можно безопасно запускать jQuery-анимацию на том же элементе.
CustomEvent в
старых браузерах.scrollStart и scrollStop корректно
триггерятся..bind()
или .live() не рекомендуется — они могут вызвать проблемы с
делегированными событиями Smooth Scroll..get() при передаче
jQuery-объектов в Smooth Scroll.$(document).on(...).Smooth Scroll может полностью интегрироваться в проект с jQuery при соблюдении этих правил, сохраняя плавность и контроль над прокруткой, а также обеспечивая совместимость с динамическими элементами и пользовательскими анимациями.