Smooth Scroll в JavaScript предоставляет возможность плавной прокрутки к целевым элементам страницы. Одним из ключевых аспектов корректной работы библиотеки является правильная валидация селекторов, так как некорректные или отсутствующие элементы могут привести к ошибкам и нарушению UX.
Перед тем как инициировать плавную прокрутку, важно убедиться, что
указанный селектор существует в DOM. Для этого используется стандартный
метод document.querySelector:
const target = document.querySelector('#section1');
if (target) {
const scroll = new SmoothScroll();
scroll.animateScroll(target);
} else {
console.warn('Элемент с селектором #section1 не найден');
}
Ключевые моменты:
querySelector возвращает null, если
элемент не найден.if (target) предотвращает ошибки при
попытке скролла к несуществующему элементу.Smooth Scroll работает с любыми валидными CSS-селекторами: ID, классы, атрибуты. Например:
// По классу
scroll.animateScroll(document.querySelector('.content-block'));
// По атрибуту
scroll.animateScroll(document.querySelector('[data-scroll="target"]'));
Особенности:
div > p:first-child, также поддерживается.Часто Smooth Scroll используется вместе с ссылками
<a>:
const links = document.querySelectorAll('a[data-scroll]');
links.forEach(link => {
const targetSelector = link.getAttribute('href');
const targetElement = document.querySelector(targetSelector);
if (targetElement) {
link.addEventListener('click', e => {
e.preventDefault();
scroll.animateScroll(targetElement);
});
} else {
console.warn(`Элемент ${targetSelector} отсутствует на странице`);
}
});
Важные моменты:
getAttribute('href') может вернуть некорректное
значение, например #, #undefined, поэтому
валидация обязательна.Библиотека самостоятельно выполняет базовую проверку селектора:
animateScroll не приводит к ошибке, но
прокрутка не выполняется.before для дополнительной
валидации:const scroll = new SmoothScroll();
scroll.animateScroll(document.querySelector('#section2'), {
before: function (anchor, toggle) {
if (!anchor) {
console.error('Элемент для прокрутки не найден');
return false; // отменяет анимацию
}
}
});
При динамическом изменении DOM селекторы могут перестать существовать к моменту клика. Для таких случаев необходимо:
animateScroll.document.body.addEventListener('click', function(e) {
const link = e.target.closest('a[data-scroll]');
if (!link) return;
const target = document.querySelector(link.getAttribute('href'));
if (target) {
e.preventDefault();
scroll.animateScroll(target);
}
});
Smooth Scroll позволяет передавать массив элементов или NodeList:
const sections = document.querySelectorAll('.section');
sections.forEach(section => {
if (section) {
scroll.animateScroll(section);
}
});
Советы:
null для каждого элемента предотвращает
ошибки при частичной динамической загрузке контента.#header, #footer, но нужно убедиться, что все элементы
существуют, иначе анимация будет выполняться только для найденных.Иногда требуется убедиться, что значение атрибута корректно передано как селектор:
const href = link.getAttribute('href');
if (/^#[\w-]+$/.test(href)) {
const target = document.querySelector(href);
if (target) scroll.animateScroll(target);
}
Преимущества:
#123!@.animateScroll.Валидация селекторов — это базовый, но критически важный шаг для корректной работы Smooth Scroll, предотвращения ошибок JavaScript и поддержания плавной анимации при прокрутке.