better transitionEnd abstraction