var detectTransitionEvent = function() { var element = document.createElement('dummy'); var events = { 'transition': 'transitionend', 'OTransition': 'oTransitionEnd', 'MozTransition': 'transitionend', 'WebkitTransition': 'webkitTransitionEnd' }; for(var event in events) { if("undefined" != typeof element.style[event]) { return events[event]; } } return null; }; $.fn.transitionEnd = function(callback) { var $this = $(this); var event = detectTransitionEvent(); return $this.unbind(event).one(event, callback); }; $('button').click(function() { $(this).transitionEnd(function() { $('body').append('<br />transition ended'); }); $(this).toggleClass('wide'); });
<button>Click me</button>
button { width: 100px; transition: all 0.5s linear; } button.wide { width: 200px; }