This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The transitionstart event is fired when a CSS transition has actually started, i.e., after any transition-delay has ended.
| Bubbles | Yes |
|---|---|
| Cancelable | No |
| Interface | TransitionEvent |
| Event handler property | ontransitionstart |
Examples
This code adds a listener to the transitionstart event:
element.addEventListener('transitionstart', () => {
console.log('Started transitioning');
});
The same, but using the ontransitionstart property instead of addEventListener():
element.ontransitionrun = () => {
console.log('Started transitioning');
};
Live example
In the following example, we have a simple <div> element, styled with a transition that includes a delay:
<div class="transition">Hover over me</div> <div class="message"></div>
.transition {
width: 100px;
height: 100px;
background: rgba(255,0,0,1);
transition-property: transform, background;
transition-duration: 2s;
transition-delay: 1s;
}
.transition:hover {
transform: rotate(90deg);
background: rgba(255,0,0,0);
}
To this, we'll add some JavaScript to indicate where the transitionstart and transitionrun events fire.
const transition = document.querySelector('.transition');
const message = document.querySelector('.message');
transition.addEventListener('transitionrun', function() {
message.textContent = 'transitionrun fired';
});
transition.addEventListener('transitionstart', function() {
message.textContent = 'transitionstart fired';
});
transition.addEventListener('transitionend', function() {
message.textContent = 'transitionend fired';
});
The difference is that:
- transitionrun fires when the transition is created (i.e. at the start of any delay).
- transitionstart fires when the actual animation has begun (i.e. at the end of any delay).
Specifications
| Specification | Status | Comment |
|---|---|---|
| CSS Transitions The definition of 'transitionstart' in that specification. |
Working Draft | Initial definition. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
transitionstart event | Chrome Full support 74 | Edge Full support ≤79 | Firefox Full support 53 | IE ? | Opera Full support 62 | Safari
Full support
13.1
| WebView Android Full support 74 | Chrome Android Full support 74 | Firefox Android Full support 53 | Opera Android Full support 53 | Safari iOS
Full support
13.4
| Samsung Internet Android Full support 11.0 |
Legend
- Full support
- Full support
- Compatibility unknown
- Compatibility unknown
- User must explicitly enable this feature.
- User must explicitly enable this feature.
See also
- The
GlobalEventHandlers.ontransitionstartevent handler - The
TransitionEventinterface - CSS properties:
transition,transition-delay,transition-duration,transition-property,transition-timing-function - Related events:
transitionend,transitionrun,transitioncancel - This event on
Documenttargets:transitionstart - This event on
Windowtargets:transitionstart
