I’ve actually run into situations where the animation events never fire. I think this happens when the DOM is busy or has just inserted a large / complex fragment, etc. This happens in Google Chrome and iOS, so it might be WebKit-specific. If these events are on a critical path, make sure you have a setTimeout or something as a backup.

I set a timeout for twice as long as the CSS Animation’s duration, and check to see (via a flag) whether or not the AnimationEnd event has been triggered. If the time is up and the event hasn’t gone off, then I forcefully continue execution.

In general, I find events in WebKit to be pretty flaky, so use them sparingly and code defensively.