Here you can use a clean utility to accomplish this.
function animatron (target, prop, duration, to, from, easing) { // return if no target or prop if (target == null || prop == null) { return; } // defaults if (duration == null) { duration = 250; } if (to == null) { to = 0; } if (from == null) { from = target.getHeight(); } if (easing == null) { easing = 'ease-out'; } // to property var t = {}; t[prop] = to; // from property var f = {}; f[prop] = from; // Animation Options var opts = { duration: duration, easing: easing, element: target.element, from: f, preserveEndState: true, to: t }; // Animation Object var anime = new Ext.fx.Animation(opts); // On animationend Event anime.on('animationend', function (animation, element, isInterrupted) { // Hide the target if the to is 0 if (to == 0 && (prop == 'height' || prop == 'width')) { if (!isInterrupted) { target.hide(); } } // Update property if width or height if (prop == 'height') { target.setHeight(to); } if (prop == 'width') { target.setWidth(to); } // Dispatch 'animated' event to target target.fireEvent('animated', animation, element, to, from, isInterrupted); }); // Show the target if it hidden and to isn't 0 if (target.getHidden() == true && to != 0) { target.show(); } // Run the animation Ext.Animator.run(anime); }
You can listen to the "animated" event in the target element.
animatron(dataview, 'height', 500, 0); dataview.addListener('animated', function (animation, element, to, from, isInterrupted) { console.log('animation ended'); console.log('interrupted: '+ isInterrupted); });
source share