Одной из наиболее частых ошибок является некорректное подключение Smooth Scroll. Если использовать устаревшие версии или подключать скрипт в неверном порядке, скрипт не будет работать. Для правильного подключения необходимо:
<script src="https://cdn.jsdelivr.net/npm/smooth-scroll@16/dist/smooth-scroll.polyfills.min.js"></script>
DOMContentLoaded.Smooth Scroll требует явной инициализации. Часто разработчики забывают вызвать конструктор или делают это до загрузки DOM:
// Неправильный вариант
const scroll = new SmoothScroll('a[href*="#"]');
// Правильный вариант
document.addEventListener('DOMContentLoaded', function () {
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
speedAsDuration: true,
easing: 'easeInOutCubic'
});
});
DOMContentLoaded гарантирует,
что все элементы уже присутствуют в DOM.Частая ошибка — использование селекторов, которые не соответствуют
элементам на странице. Например, если написать
'a[href="#section"]', а в HTML используется
id="section1", библиотека не сработает.
'a[href*="#"]' и убедиться, что все якоря имеют корректные
id.Smooth Scroll может конфликтовать с другими библиотеками, которые
управляют прокруткой страницы, например с fullPage.js или
кастомными скриптами для скролла.
Некорректное указание параметров speed и
easing часто приводит к неестественному поведению:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 'fast', // Ошибка: скорость должна быть числом
easing: 'linear'
});
'linear', 'easeInQuad',
'easeOutQuad', 'easeInOutCubic' и др.На мобильных устройствах поведение Smooth Scroll может отличаться. Часто забывают учитывать:
scroll-behavior в современных мобильных
браузерах, которые могут конфликтовать с Smooth Scroll.Решение: использовать корректные опции offset для
компенсации смещения:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
offset: 80
});
Если элементы якорей добавляются в DOM динамически, Smooth Scroll не будет работать для новых элементов без повторной инициализации:
// Для динамически добавленных ссылок
scroll.destroy();
scroll = new SmoothScroll('a[href*="#"]', options);
Некоторые разработчики пытаются использовать Smooth Scroll совместно
с scroll-behavior: smooth; в CSS:
html {
scroll-behavior: smooth;
}
ignoreCancelEvents.Smooth Scroll не фильтрует ссылки, которые не ведут к якорям.
Например, если есть <a href="#">, клик по ней может
вызвать нежелательный скролл.
const scroll = new SmoothScroll('a[href*="#"]:not([href="#"])');
Smooth Scroll не бросает исключений при неправильных параметрах, поэтому часто ошибки остаются незамеченными:
Недопустимые селекторы, неверные числа для speed или
offset
Неинициализированные элементы при вызове методов
animateScroll
Рекомендация: использовать проверку существования элемента перед вызовом методов:
const target = document.querySelector('#section1');
if (target) {
scroll.animateScroll(target);
}
Основные ошибки при работе с Smooth Scroll связаны с подключением, инициализацией, селекторами, параметрами скорости и offset, мобильными особенностями и динамическим контентом. Их предотвращение требует внимательного контроля порядка подключения скрипта, правильного выбора селекторов и тестирования поведения на разных устройствах и браузерах.