Element: animationstart event

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2019.

The animationstart event is fired when a CSS Animation has started. If there is an animation-delay, this event will fire once the delay period has expired. A negative delay will cause the event to fire with an elapsedTime equal to the absolute value of the delay (and, correspondingly, the animation will begin playing at that time index into the sequence).

Syntax

Use the event name in methods like addEventListener(), or set an event handler property.

js
addEventListener("animationstart", (event) => { })

onanimationstart = (event) => { }

Event type

An AnimationEvent. Inherits from Event.

Event AnimationEvent

Event properties

Also inherits properties from its parent Event.

AnimationEvent.animationName Read only

A string containing the value of the animation-name that generated the animation.

AnimationEvent.elapsedTime Read only

A float giving the amount of time the animation has been running, in seconds, when this event fired, excluding any time the animation was paused. For an animationstart event, elapsedTime is 0.0 unless there was a negative value for animation-delay, in which case the event will be fired with elapsedTime containing (-1 * delay).

AnimationEvent.pseudoElement Read only

A string, starting with '::', containing the name of the pseudo-element the animation runs on. If the animation doesn't run on a pseudo-element but on the element, an empty string: ''.

Examples

This listens for the animationstart event and logs a message when it is fired:

js
const animated = document.querySelector(".animated");

animated.addEventListener("animationstart", () => {
  console.log("Animation started");
});

The same, but using onanimationstart:

js
const animated = document.querySelector(".animated");

animated.onanimationstart = () => {
  console.log("Animation started");
};

Live example

HTML

html
<div class="animation-example">
  <div class="container">
    <p class="animation">You chose a cold night to visit our planet.</p>
  </div>
  <button class="activate" type="button">Activate animation</button>
  <div class="event-log"></div>
</div>

CSS

css
.container {
  height: 3rem;
}

.event-log {
  width: 25rem;
  height: 2rem;
  border: 1px solid black;
  margin: 0.2rem;
  padding: 0.2rem;
}

.animation.active {
  animation-duration: 2s;
  animation-name: slide-in;
  animation-iteration-count: 2;
}

@keyframes slide-in {
  from {
    transform: translateX(100%) scaleX(3);
  }
  to {
    transform: translateX(0) scaleX(1);
  }
}

JavaScript

js
const animation = document.querySelector("p.animation");
const animationEventLog = document.querySelector(
  ".animation-example>.event-log",
);
const applyAnimation = document.querySelector(
  ".animation-example>button.activate",
);
let iterationCount = 0;

animation.addEventListener("animationstart", () => {
  animationEventLog.textContent = `${animationEventLog.textContent}'animation started' `;
});

animation.addEventListener("animationiteration", () => {
  iterationCount++;
  animationEventLog.textContent = `${animationEventLog.textContent}'animation iterations: ${iterationCount}' `;
});

animation.addEventListener("animationend", () => {
  animationEventLog.textContent = `${animationEventLog.textContent}'animation ended'`;
  animation.classList.remove("active");
  applyAnimation.textContent = "Activate animation";
});

animation.addEventListener("animationcancel", () => {
  animationEventLog.textContent = `${animationEventLog.textContent}'animation canceled'`;
});

applyAnimation.addEventListener("click", () => {
  animation.classList.toggle("active");
  animationEventLog.textContent = "";
  iterationCount = 0;
  const active = animation.classList.contains("active");
  applyAnimation.textContent = active
    ? "Cancel animation"
    : "Activate animation";
});

Result

Specifications

Specification
CSS Animations Level 1
# eventdef-globaleventhandlers-animationstart

Browser compatibility

desktop mobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
animationstart event
Chrome – Partial support
Chrome 43 – 78 (Release date: 2015-05-19)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Chrome – Full support
Chrome 81 (Release date: 2020-04-07)
prefix
prefix Implemented with the vendor prefix: webkit
Chrome – Full support
Chrome 79 (Release date: 2019-12-10)
footnote Full support
Edge – Partial support
Edge 12 – 17 (Release date: 2015-07-29)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Edge – Full support
Edge 81 (Release date: 2020-04-13)
prefix
prefix Implemented with the vendor prefix: webkit
Edge – Full support
Edge 18 (Release date: 2018-10-02)
footnote Full support
Firefox – Partial support
Firefox 5 – 50 (Release date: 2011-06-21)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Firefox – Full support
Firefox 51 (Release date: 2017-01-24)
footnote Full support
Opera – Partial support
Opera 30 – 65 (Release date: 2015-06-09)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Opera – Full support
Opera 68 (Release date: 2020-04-22)
prefix
prefix Implemented with the vendor prefix: webkit
Opera – Full support
Opera 66 (Release date: 2020-01-07)
footnote Full support
Safari – Full support
Safari 9 (Release date: 2015-09-30)
footnote Full support
Chrome Android – Partial support
Chrome Android 43 – 78 (Release date: 2015-05-27)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Chrome Android – Full support
Chrome Android 81 (Release date: 2020-04-07)
prefix
prefix Implemented with the vendor prefix: webkit
Chrome Android – Full support
Chrome Android 79 (Release date: 2019-12-17)
footnote Full support
Firefox for Android – Partial support
Firefox for Android 5 – 50 (Release date: 2011-06-21)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Firefox for Android – Full support
Firefox for Android 51 (Release date: 2017-01-24)
footnote Full support
Opera Android – Partial support
Opera Android 30 – 56 (Release date: 2015-06-10)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Opera Android – Full support
Opera Android 58 (Release date: 2020-05-13)
prefix
prefix Implemented with the vendor prefix: webkit
Opera Android – Full support
Opera Android 57 (Release date: 2020-03-30)
footnote Full support
Safari on iOS – Full support
Safari on iOS 9 (Release date: 2015-09-16)
footnote Full support
Samsung Internet – Partial support
Samsung Internet 4 – 11.2 (Release date: 2016-03-11)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
Samsung Internet – Full support
Samsung Internet 13 (Release date: 2020-12-02)
prefix
prefix Implemented with the vendor prefix: webkit
Samsung Internet – Full support
Samsung Internet 12 (Release date: 2020-06-19)
footnote Full support
WebView Android – Partial support
WebView Android 43 – 78 (Release date: 2015-05-27)
footnote Partial support
footnote The onanimationstart event handler property is not supported. To listen to this event, use document.addEventListener('animationstart', function() {});.
WebView Android – Full support
WebView Android 81 (Release date: 2020-04-07)
prefix
prefix Implemented with the vendor prefix: webkit
WebView Android – Full support
WebView Android 79 (Release date: 2019-12-17)
footnote Full support
WebView on iOS – Full support
WebView on iOS 9 (Release date: 2015-09-16)
footnote Full support

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
Requires a vendor prefix or different name for use.
Has more compatibility info.

See also