All,
I have a situation that looks roughly like this:
My HTML page a contains div (which I'll call "parentDiv") on which I'm performing a transition. When that transition ends, it should call "onTransitionEndParent"
parentDiv contains a div (which I'll call "childDiv") on which I'm performing a different transition. When that transition ends, it should call "onTransitionEndChild".
So, my code looks roughly like this:
parentDiv.addEventListener("webkitTransitionEnd", onTransitionEndParent, false);
childDiv.addEventListener("webkitTransitionEnd", onTransitionEndChild, false);
The problem I'm finding...
onTransitionEndParent is called when the parentDiv's transition ends (correct). However, it's ALSO called when childDiv's transition ends (not what I expected...)
In other words...
Is this the correct behavior, or am I doing something wrong?
Is there a way to make sure that onTransitionEndParent is ONLY called when the parentDiv's transition ends, and NOT when any of it's child div's transitions end?
Many thanks in advance.
transitionEnd
is so called bubbling event that is being dispatched (bubbles up) from child to its parents.
Options for you:
event.target
property of the event object - it
should contain element with ended transition.event.stopPropagation()
so to prevent its bubbling.To add to @c-smiles answer, checking for event.propertyName helps when there are multiple transitions on the element. So, for example -
button.addEventListener('transitionend', function(event) {
if (event.target.classList.contains('button') && event.propertyName === 'opacity') {
button.classList.add('hide');
}
}, false);
I encountered the same problem after the last chrome update. Children animations triggered animationend for the parent. This only happened in Chrome for desktop and not in FF or Chrome for mobile.
For anyone interested I solved this by using:
$(element).on("animationend webkitAnimationEnd", function(){
//do something
})
.children().on("animationend webkitAnimationEnd", function(){
return false; //you can just use event.stopPropagation()
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With