В библиотеке anime.js ключевые кадры (keyframes) позволяют создавать сложные анимации, задавая последовательность изменений свойств объекта в определённые моменты времени. Это мощный инструмент для реализации динамических эффектов, где одно и то же свойство меняется несколько раз в рамках одной анимации.
Для использования ключевых кадров в anime.js используется свойство
keyframes, которое принимает массив объектов. Каждый объект
описывает состояние анимируемого свойства на определённом этапе
анимации:
anime({
targets: '.box',
keyframes: [
{ translateX: 250 },
{ translateY: 100 },
{ rotate: '1turn' },
{ scale: 1.5 }
],
duration: 4000,
easing: 'easeInOutSine'
});
Разбор кода:
targets — элементы, к которым применяются
анимации.keyframes задаёт новое значение
свойства.duration задаёт общую продолжительность всей
анимации.easing управляет кривой ускорения между ключевыми
кадрами.Каждый объект keyframe может содержать duration и
easing для индивидуального контроля:
anime({
targets: '.circle',
keyframes: [
{ translateX: 200, duration: 1000, easing: 'easeOutQuad' },
{ translateY: 150, duration: 500, easing: 'easeInOutSine' },
{ rotate: '180deg', duration: 800, easing: 'linear' }
]
});
duration внутри keyframe задаёт длительность
конкретного перехода до следующего кадра.easing позволяет применять разные кривые ускорения к
отдельным шагам анимации.Keyframes поддерживают свойства delay и
offset, позволяющие управлять моментом старта анимации
конкретного кадра:
anime({
targets: '.star',
keyframes: [
{ translateX: 100, offset: 0.2 },
{ translateY: 80, offset: 0.5 },
{ rotate: '360deg', offset: 1 }
],
duration: 2000
});
offset — относительная позиция кадра в пределах всей
анимации (0 — начало, 1 — конец).offset можно синхронизировать несколько
свойств в рамках одной анимации.Keyframes можно использовать вместе с обычными свойствами анимации. Свойства, указанные вне keyframes, применяются как базовые значения для всей анимации:
anime({
targets: '.triangle',
opacity: [0, 1],
keyframes: [
{ translateX: 100 },
{ translateY: 50 },
{ scale: 1.3 }
],
duration: 3000,
easing: 'easeInOutQuad'
});
opacity изменяется плавно на протяжении всей анимации,
а translateX, translateY и scale
проходят последовательные ключевые кадры.Keyframes удобно комбинировать с параметрами loop и
direction для создания повторяющихся или обратных
анимаций:
anime({
targets: '.hexagon',
keyframes: [
{ translateX: 150 },
{ translateY: 100 },
{ rotate: '180deg' }
],
duration: 2000,
loop: true,
direction: 'alternate',
easing: 'easeInOutCubic'
});
loop: true позволяет анимации повторяться
бесконечно.direction: 'alternate' обеспечивает возврат к исходным
значениям после завершения каждого цикла.Значения свойств могут задаваться функциями, что открывает возможности для динамических анимаций:
anime({
targets: '.dot',
keyframes: [
{ translateX: () => Math.random() * 300 },
{ translateY: () => Math.random() * 200 },
{ scale: () => Math.random() + 0.5 }
],
duration: 1500,
easing: 'easeInOutSine'
});
offset вместо
большого количества duration отдельных keyframes — это
упрощает синхронизацию.opacity, scale) для плавного и предсказуемого
поведения.Keyframes в anime.js обеспечивают гибкость и точный контроль над временной последовательностью анимации, позволяя создавать как простые, так и очень сложные эффекты без необходимости писать сложный цикл JavaScript.