Миграция с других библиотек плавной прокрутки чаще всего обусловлена следующими факторами:
Smooth Scroll ориентирован на работу с якорными ссылками и обеспечивает плавную анимацию прокрутки без вмешательства в остальную логику страницы.
Ранее широко применялись решения на базе jQuery:
$('a[href*="#"]').on('click', function(e) {
e.preventDefault();
$('html, body').animate({
scrollTop: $($(this).attr('href')).offset().top
}, 500);
});
Недостатки:
Преимущества Smooth Scroll:
GSAP предоставляет мощные инструменты:
gsap.to(window, {
duration: 1,
scrollTo: "#section",
ease: "power2.out"
});
Особенности:
Причины перехода:
Smooth Scroll покрывает базовые потребности без лишнего усложнения.
Используется для продвинутых эффектов:
Недостатки:
Smooth Scroll:
Подключение через CDN:
<script src="https://cdn.jsdelivr.net/npm/smooth-scroll@16/dist/smooth-scroll.polyfills.min.js"></script>
Инициализация:
var scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
speedAsDuration: true
});
Удаляется код:
$('a[href*="#"]').on('click', function(e) { ... });
Заменяется на:
var scroll = new SmoothScroll('a[href*="#"]');
В jQuery часто использовалось:
scrollTop: target.offset().top - 100
В Smooth Scroll:
var scroll = new SmoothScroll('a[href*="#"]', {
offset: 100
});
Кастомные реализации обычно используют
window.scrollTo:
window.scrollTo({
top: targetPosition,
beh * avior: 'smooth'
});
Проблемы:
Smooth Scroll добавляет:
speed: 600
speedAsDuration: true
easing: 'easeInOutCubic'
Или кастомная функция:
easing: function (time) {
return time < 0.5
? 4 * time * time * time
: (time - 1) * (2 * time - 2) * (2 * time - 2) + 1;
}
При наличии фиксированного header:
var scroll = new SmoothScroll('a[href*="#"]', {
offset: function (anchor, toggle) {
return document.querySelector('.header').offsetHeight;
}
});
Smooth Scroll поддерживает события:
document.addEventListener('scrollStart', function (event) {
console.log('Начало прокрутки', event.detail);
});
document.addEventListener('scrollStop', function (event) {
console.log('Окончание прокрутки');
});
Это особенно полезно при переходе с более сложных библиотек, где логика завязана на событиях.
При работе с динамически добавленными элементами:
var scroll = new SmoothScroll();
scroll.animateScroll(
document.querySelector('#target')
);
Некоторые библиотеки (например, Locomotive Scroll) полностью перехватывают скролл. Smooth Scroll:
Smooth Scroll сохраняет:
По умолчанию обновляется URL:
updateURL: true
Отключение:
updateURL: false
Использование polyfills-версии:
smooth-scroll.polyfills.min.js
Это важно при переходе с библиотек, которые уже включали полифилы.
Smooth Scroll:
requestAnimationFrameПри переходе с тяжёлых решений наблюдается:
1. Двойная обработка кликов
Если старый код не удалён:
// конфликт
$('a').click(...)
new SmoothScroll(...)
2. Неправильный selector
new SmoothScroll('a[href^="#"]');
может пропускать некоторые ссылки
Лучше:
'a[href*="#"]'
3. Игнорирование offset
Часто приводит к тому, что контент скрывается под header.
4. Конфликт с CSS scroll-behavior
Если в CSS указано:
html {
scroll-behavior: smooth;
}
Следует отключить:
scroll-behavior: auto;
scroll.animateScroll(500);
Или к элементу:
scroll.animateScroll(document.querySelector('#section'));
var scroll = new SmoothScroll('a[href*="#"]', {
clip: true
});
var scroll = new SmoothScroll('a[href*="#"]', {
header: '.fixed-header'
});
После миграции код обычно:
Smooth Scroll закрывает основной кейс — плавную прокрутку к якорям — без перегрузки архитектуры проекта, что делает его оптимальным выбором при упрощении фронтенд-стека.