Element.animate()
Анимация на чистом JS.
Метод animate() интерфейса Element это быстрый способ создания анимации, которая сразу применяется к элементу и проигрывает анимацию. Метод возвращает созданный экземпляр класса Animation.
Элементы могут иметь несколько, прикреплённых к ним, анимаций. Вы можете получить список анимаций, которые влияют на элемент, вызвав Element.getAnimations().
Возвращает
Возвращает Animation.
Синтаксис
const animation = element.animate( keyframes, options );
- keyframes(массив/объект) (обязательный)
- Массив объектов ключевых кадров, либо объект ключевого кадра, свойства которого являются массивами значений для итерации. Смотрите Keyframe Formats.
- options(объект/число) (обязательный)
Целое число - продолжительность анимации (в миллисекундах), или объект, содержащий опции анимации.
-
id
Свойство уникальное для animate(): DOMString, с помощью которого можно ссылаться на анимацию. Подробнее. -
direction
Указывает направление анимации. Она может выполняться:normal
- вперёдreverse
- назадalternate
- переключать направление после каждой итерацииalternate-reverse
- работать назад и переключать после каждой итерации.
По умолчанию: "normal"
-
duration
Число миллисекунд, в течении которых выполняется каждая итерация анимации. Хотя это свойство технически необязательное, имейте ввиду, что ваша анимация не будет запущена, если это значение равно 0.
По умолчанию: 0 -
easing(string)
Скорость изменения анимации с течением времени. Принимает:linear ease ease-in ease-out ease-in-out cubic-bezier(0.42, 0, 0.58, 1) steps(4, end)
По умолчанию: "linear"
-
delay
Число миллисекунд для задержки начала анимации.
По умолчанию: 0 -
endDelay(int)
Число миллисекунд задержки после окончания анимации. Это в первую очередь полезно, когда последовательность действий анимации базируется на окончании другой анимации.
По умолчанию: 0 -
fill(string)
Диктует должны ли эффекты анимации отражаться на самом элементе:backwards
- перед воспроизведениемforwards
- сохраняться после того, как анимация завершиласьboth
- или и то и другое.none
- не отражать изменения стилей на элементе.
По умолчанию: "none"
-
iterationStart(float)
Описывает, в какой момент итерации должна начаться анимация. Например, значение 0.5 указывает на начало запуска анимации в середине первой итерации, с таким набором значений анимация с 2-мя итерациями будет закончена на полпути к третей итерации.
По умолчанию: 0.0 - iterations
Число раз, которое анимация должна повторяться. Может принимать значениеInfinity
, чтобы повторять анимацию до тех пор, пока элемент существует.
По умолчанию: 1
-
Свойства объекта Animation
- currentTime
- Текущее значение времени анимации в миллисекундах, независимо от того работает анимация или приостановлена. Если анимация не имеет timeline, неактивна или ещё не воспроизведена, то это значение равно нулю.
- effect
- Возвращает и задаёт AnimationEffectReadOnly связанный с этой анимацией. Обычно это объект KeyframeEffect.
- finished(readonly)
- Возвращает промис, сигнализирующий о завершении анимации.
- id
- Возвращает и задаёт String(строку), используемую для идентификации анимации.
- playState(readonly)
Состояние воспроизведения анимации.
idle
- The current time of the animation is unresolved and there are no pending tasks.running
- The animation is running.paused
- The animation was suspended and the Animation.currentTime property is not updating.finished
- The animation has reached one of its boundaries and the Animation.currentTime property is not updating.
- playbackRate(float)
Возвращает или задаёт скорость воспроизведения анимации. Отрицательное число означает, что анимация идет в обратном направлении.
0
- останавливает анимацию (пауза).1
- анимация движется вперед.-1
- анимация движется назад.2
- удваивает скорость анимации.-1.5
- замедляет анимацию в 1,5 раза.
// вперед Animation.playbackRate = 1; Animation.play(); // назад Animation.playbackRate = -1; Animation.play();
https://codepen.io/rachelnabors/pen/PNYGZQ
https://codepen.io/rachelnabors/pen/PNGGaV- ready(readonly)
- Возвращает промис, сигнализирующий о начале проигрывания анимации.
- startTime
- Возвращает или задаёт начало выполнения анимации.
- timeline
- Возвращает или задаёт timeline, связанную с этой анимации.
События
- oncancel
- Возвращает и задаёт обработчик событий для отмены события.
- onfinish
- Возвращает и задаёт обработчик событий для завершения события.
Методы
- cancel()
- Очищает все keyframeEffects вызванные этой анимацией и прекращает её выполнение.
- commitStyles()
- Фиксирует конечное состояние стилей анимации, даже после того, как эта анимация была удалена. Это приведёт к тому, что конечное состояние стилей будет записано в анимируемый элемент в виде свойств внутри атрибута style.
- finish()
- Ищет конец анимации, в зависимости от того, играет ли анимация или инвертирует.
- pause()
- Приостанавливает запущенную анимацию.
- persist()
- Анимация сохраняется в явном виде, когда в противном случае она была бы удалена из-за поведения браузера, которое предполагает автоматическое удаление анимаций заполнения.
- play()
- Запускает или продолжает выполнение анимации или начинает анимацию снова, если она ранее завершилась.
- reverse()
- Меняет направление воспроизведения, останавливаясь в начале анимации. Если анимация закончена или не запущена, то будет проигрываться с конца к началу.
- updatePlaybackRate()
- Задаёт скорость анимации после синхронизации её положения воспроизведения.
Примеры
#1 Как работает
Следующий код:
var animation = elem.animate({ opacity: 0 }, 2000);
примерно тоже самое что:
var effect = new KeyframeEffect( elem, { opacity: 0 }, 2000 ); var animation = new Animation( effect, elem.ownerDocument.timeline ); animation.play();
#1 Примеры
https://web-animations.github.io/web-animations-demos/
Примеры (алиса)
Демо: Down the Rabbit Hole (with Web Animations API)
Демо: Growing/Shrinking Alice Game : Alice in Web Animations API Land
Демо: Red Queen's Race (with Web Animations API)
#1 Пример
const elem = document.getElementById("tunnel") elem.animate( [ { transform: 'translate3D( 0, 0, 0 )' }, { transform: 'translate3D( 0, -300px, 0 )' } ], { duration: 1000, iterations: Infinity } )
let player = elem.animate( { height: [ `100px`, `200px` ] }, { duration: 1000, fill: 'forwards' } ) player.onfinish = ev => { /* do something */ } // or player.addEventListener( 'finish', ev => { /* do something */ } )
// fadeIn elem.animate( { opacity: [ 0, 1 ], }, { duration: 200 } )