Библиотека Smooth Scroll обеспечивает плавную
прокрутку страницы к якорным элементам, но для гибкого управления
поведением скролла часто требуется передавать дополнительные параметры в
коллбэки, такие как before, after,
cancel, complete. Эти коллбэки позволяют
вмешиваться в процесс прокрутки и выполнять действия в нужные
моменты.
Каждый из этих коллбэков принимает объект события, а также может
принимать дополнительные параметры, переданные при инициализации Smooth
Scroll или при вызове метода animateScroll().
Smooth Scroll предоставляет возможность передачи дополнительных данных через объект настроек. Пример структуры настроек:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
offset: 100,
before: function(anchor, toggle, options, customData) {
console.log('Начало прокрутки к', anchor);
console.log('Пользовательские данные:', customData);
},
after: function(anchor, toggle, options, customData) {
console.log('Прокрутка завершена к', anchor);
console.log('Пользовательские данные:', customData);
}
});
anchor – целевой элемент якоря.toggle – элемент, инициирующий прокрутку (например,
<a>).options – объект текущих настроек Smooth Scroll.customData – произвольные данные, передаваемые для
использования внутри коллбэка.Для передачи customData можно использовать
дополнительное поле в объекте настроек или параметр при вызове метода
animateScroll():
scroll.animateScroll(document.querySelector('#section2'), null, {
speed: 1000,
customData: { sectionId: 2, highlight: true }
});
Внутри коллбэка объект customData будет доступен для
логики выделения секции, запуска анимаций или передачи контекста между
разными вызовами.
Smooth Scroll гарантирует правильный контекст (this)
внутри коллбэков. Он указывает на экземпляр Smooth Scroll, что позволяет
обращаться к его методам и свойствам:
const scroll = new SmoothScroll('a[href*="#"]', {
after: function(anchor, toggle, options) {
this.animateScroll(document.querySelector('#top'));
}
});
Такой подход полезен для построения цепочек скроллов или автоматического возврата к началу страницы после завершения текущей анимации.
При использовании стрелочных функций стоит
учитывать, что this не привязывается к экземпляру
библиотеки. Если требуется доступ к методам Smooth Scroll, лучше
использовать обычную функцию:
const scroll = new SmoothScroll('a[href*="#"]', {
after: (anchor, toggle, options) => {
console.log('Стрелочная функция:', anchor);
// this.animateScroll(...) здесь недоступен
}
});
Для передачи дополнительных параметров в стрелочной функции можно использовать замыкание:
const customData = { color: 'red', speedModifier: 1.2 };
const scroll = new SmoothScroll('a[href*="#"]', {
after: (anchor, toggle, options) => {
console.log('Параметры через замыкание:', customData);
}
});
scroll.animateScroll(sectionElement, null, {
customData: { highlightClass: 'active-section' },
after: function(anchor, toggle, options, data) {
anchor.classList.add(data.highlightClass);
}
});
scroll.animateScroll(document.querySelector('#portfolio'), null, {
customData: { animation: 'fadeInUp' },
after: function(anchor, toggle, options, data) {
anchor.querySelectorAll('.item').forEach(el => {
el.classList.add(data.animation);
});
}
});
const sharedData = { startTime: null };
scroll.animateScroll('#section3', null, {
before: function() { sharedData.startTime = Date.now(); },
after: function() {
const duration = Date.now() - sharedData.startTime;
console.log('Время прокрутки:', duration, 'мс');
}
});
customData вместо глобальных переменных.before для подготовки DOM, after для запуска
анимаций и complete для очистки временных данных.Передача параметров в коллбэки Smooth Scroll позволяет гибко управлять анимацией и интегрировать прокрутку с другими динамическими элементами страницы. Такой подход упрощает реализацию сложных интерфейсов с множественными секциями и интерактивными элементами.