Параллакс эффект — это визуальный приём, при котором элементы страницы движутся с разной скоростью при прокрутке, создавая ощущение глубины и динамики. В современном веб-дизайне параллакс широко используется для лендингов, портфолио и интерактивных страниц. Библиотека Smooth Scroll в сочетании с чистым JavaScript позволяет реализовать плавный скролл и управлять положением элементов, создавая эффект параллакса.
Для начала необходимо подключить библиотеку Smooth Scroll и инициализировать её на странице:
const scroll = new SmoothScroll({
speed: 800,
easing: 'easeInOutCubic',
offset: 0,
});
Инициализация Smooth Scroll создаёт базовую основу для управления скроллом, после чего можно добавить управление позиционированием элементов.
Эффект параллакса реализуется через динамическое изменение CSS-свойств элементов в зависимости от текущей позиции скролла. Основные приёмы:
.parallax:const parallaxElements = document.querySelectorAll('.parallax');
window.addEventListener('scroll', () => {
const scrollTop = window.pageYOffset;
parallaxElements.forEach(el => {
const speed = el.getAttribute('data-speed');
el.style.transform = `translateY(${scrollTop * speed}px)`;
});
});
el.style.opacity = 1 - scrollTop / (window.innerHeight * 2);
el.style.transform = `scale(${1 + scrollTop / 2000})`;
Эти подходы могут комбинироваться для более сложного и впечатляющего эффекта.
Smooth Scroll позволяет плавно прокручивать страницу к нужному элементу. При этом можно сочетать прокрутку с параллакс-анимацией:
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
scroll.animateScroll(document.querySelector(this.getAttribute('href')));
});
});
Параллакс-эффекты при этом будут корректно работать, так как Smooth
Scroll изменяет window.pageYOffset, на который подписаны
обработчики анимации.
const rect = el.getBoundingClientRect();
const speed = 0.5 + rect.top / window.innerHeight * 0.5;
el.style.transform = `translateY(${scrollTop * speed}px)`;
let ticking = false;
window.addEventListener('scroll', () => {
if (!ticking) {
window.requestAnimationFrame(() => {
updateParallax();
ticking = false;
});
ticking = true;
}
});
function updateParallax() {
const scrollTop = window.pageYOffset;
parallaxElements.forEach(el => {
const speed = el.getAttribute('data-speed');
el.style.transform = `translateY(${scrollTop * speed}px)`;
});
}
el.style.transform = `translate(${scrollTop * speedX}px, ${scrollTop * speedY}px)`;
will-change: transform; для
элементов, участвующих в анимации.getBoundingClientRect() только
когда это необходимо.requestAnimationFrame для снижения количества
перерисовок.Smooth Scroll легко сочетается с GSAP, ScrollMagic и другими инструментами для более сложных параллакс-сценариев, позволяя управлять кривыми анимации, событиями триггеров и синхронизацией с другими эффектами.
Параллакс с Smooth Scroll обеспечивает плавную и управляемую анимацию, минимизируя рывки и создавая ощущение глубины, что особенно важно для современных динамичных интерфейсов.