mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-04-23 19:40:56 +08:00
refactor($animate): queue all successive animations to use only one reflow
This commit is contained in:
committed by
Misko Hevery
parent
3f31a7c769
commit
23c698821f
@@ -569,7 +569,7 @@ angular.module('ngAnimate', ['ng'])
|
||||
}
|
||||
}]);
|
||||
|
||||
$animateProvider.register('', ['$window', '$sniffer', function($window, $sniffer) {
|
||||
$animateProvider.register('', ['$window', '$sniffer', '$timeout', function($window, $sniffer, $timeout) {
|
||||
var forEach = angular.forEach;
|
||||
|
||||
// Detect proper transitionend/animationend event names.
|
||||
@@ -605,6 +605,19 @@ angular.module('ngAnimate', ['ng'])
|
||||
animationIterationCountKey = 'IterationCount',
|
||||
ELEMENT_NODE = 1;
|
||||
|
||||
var animationReflowQueue = [], animationTimer, timeOut = false;
|
||||
function afterReflow(callback) {
|
||||
animationReflowQueue.push(callback);
|
||||
$timeout.cancel(animationTimer);
|
||||
animationTimer = $timeout(function() {
|
||||
angular.forEach(animationReflowQueue, function(fn) {
|
||||
fn();
|
||||
});
|
||||
animationReflowQueue = [];
|
||||
animationTimer = null;
|
||||
}, 10, false);
|
||||
}
|
||||
|
||||
function animate(element, className, done) {
|
||||
if(['ng-enter','ng-leave','ng-move'].indexOf(className) == -1) {
|
||||
var existingDuration = 0;
|
||||
@@ -670,13 +683,15 @@ angular.module('ngAnimate', ['ng'])
|
||||
});
|
||||
|
||||
// This triggers a reflow which allows for the transition animation to kick in.
|
||||
element.prop('clientWidth');
|
||||
if(transitionDuration > 0) {
|
||||
node.style[transitionProp + propertyKey] = '';
|
||||
}
|
||||
element.addClass(activeClassName);
|
||||
|
||||
var css3AnimationEvents = animationendEvent + ' ' + transitionendEvent;
|
||||
|
||||
afterReflow(function() {
|
||||
if(transitionDuration > 0) {
|
||||
node.style[transitionProp + propertyKey] = '';
|
||||
}
|
||||
element.addClass(activeClassName);
|
||||
});
|
||||
|
||||
element.on(css3AnimationEvents, onAnimationProgress);
|
||||
|
||||
// This will automatically be called by $animate so
|
||||
|
||||
Reference in New Issue
Block a user