Параллакс-эффект создаётся за счёт разной скорости движения элементов
на экране, что создаёт ощущение глубины. В контексте
anime.js это реализуется через анимацию координат,
масштабов и прозрачности элементов в зависимости от положения прокрутки
или движения курсора.
Для создания базового параллакса используется свойство
translateX или translateY. Пример анимации
нескольких слоёв с разной скоростью:
const layers = document.querySelectorAll('.layer');
layers.forEach((layer, index) => {
anime({
targets: layer,
translateY: (el, i) => i * 20, // смещение каждого слоя по Y
duration: 2000,
easing: 'easeOutQuad',
loop: true,
direction: 'alternate'
});
});
Для создания ощущения глубины элементы ближнего плана должны двигаться быстрее, чем дальнего. Эффект усиливается, если добавить масштабирование:
anime({
targets: '.foreground',
translateY: 50,
scale: 1.2,
duration: 1500,
easing: 'easeOutCubic',
loop: true,
direction: 'alternate'
});
anime({
targets: '.background',
translateY: 20,
scale: 1,
duration: 1500,
easing: 'easeOutCubic',
loop: true,
direction: 'alternate'
});
Для интерактивного параллакса часто используют событие
scroll. Положение элементов рассчитывается пропорционально
прокрутке страницы:
window.addEventListener('scroll', () => {
const scrollPosition = window.scrollY;
anime({
targets: '.layer1',
translateY: scrollPosition * 0.5,
duration: 0,
easing: 'linear'
});
anime({
targets: '.layer2',
translateY: scrollPosition * 0.3,
duration: 0,
easing: 'linear'
});
});
Для динамичного параллакса можно использовать координаты курсора. Например, движение элементов по оси X:
document.addEventListener('mousemove', (e) => {
const x = e.clientX;
anime({
targets: '.layer',
translateX: x * 0.05,
duration: 1000,
easing: 'easeOutExpo'
});
});
0.05) регулирует амплитуду движения.Для сложных сцен движения нескольких слоёв можно комбинировать смещения по X, Y, масштаб и прозрачность одновременно:
anime({
targets: '.layer',
translateX: () => anime.random(-50, 50),
translateY: () => anime.random(-30, 30),
scale: [1, 1.1],
opacity: [0.8, 1],
duration: 2500,
easing: 'easeInOutSine',
loop: true,
direction: 'alternate'
});
will-change: transform в CSS для элементов
с анимацией.requestAnimationFrame вместо
частого запуска анимаций с нулевой длительностью.translate, scale и
opacity усиливает реалистичность эффекта.loop и
direction: 'alternate' позволяют поддерживать постоянное
движение без резких скачков.Эти приёмы формируют фундамент для построения сложных параллакс-сцен с anime.js, обеспечивая плавность, интерактивность и визуальную глубину интерфейсов.