diff options
| author | Matias Niemelä | 2013-10-31 11:49:06 -0700 |
|---|---|---|
| committer | Matias Niemelä | 2013-11-05 21:44:25 -0500 |
| commit | 41a2d5b30f4feb90651eb577cf44852a6d2be72c (patch) | |
| tree | 1bc4f99553a0acc140ee36e3ea15be235e7d07c3 /src/ngAnimate/animate.js | |
| parent | e53ff431e1472c0b2d5405d267d4e403ca31087e (diff) | |
| download | angular.js-41a2d5b30f4feb90651eb577cf44852a6d2be72c.tar.bz2 | |
fix($animate): ensure staggering animations understand multiple delay values
Diffstat (limited to 'src/ngAnimate/animate.js')
| -rw-r--r-- | src/ngAnimate/animate.js | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/src/ngAnimate/animate.js b/src/ngAnimate/animate.js index ad192a5b..3bb6ff31 100644 --- a/src/ngAnimate/animate.js +++ b/src/ngAnimate/animate.js @@ -789,7 +789,8 @@ angular.module('ngAnimate', ['ng']) var data = cacheKey ? lookupCache[cacheKey] : null; if(!data) { var transitionDuration = 0, transitionDelay = 0, - animationDuration = 0, animationDelay = 0; + animationDuration = 0, animationDelay = 0, + transitionDelayStyle, animationDelayStyle; //we want all the styles defined before and after forEach(element, function(element) { @@ -799,9 +800,13 @@ angular.module('ngAnimate', ['ng']) transitionDuration = Math.max(parseMaxTime(elementStyles[transitionProp + durationKey]), transitionDuration); if(!onlyCheckTransition) { - transitionDelay = Math.max(parseMaxTime(elementStyles[transitionProp + delayKey]), transitionDelay); + transitionDelayStyle = elementStyles[transitionProp + delayKey]; - animationDelay = Math.max(parseMaxTime(elementStyles[animationProp + delayKey]), animationDelay); + transitionDelay = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay); + + animationDelayStyle = elementStyles[animationProp + delayKey]; + + animationDelay = Math.max(parseMaxTime(animationDelayStyle), animationDelay); var aDuration = parseMaxTime(elementStyles[animationProp + durationKey]); @@ -815,9 +820,11 @@ angular.module('ngAnimate', ['ng']) }); data = { total : 0, + transitionDelayStyle: transitionDelayStyle, transitionDelay : transitionDelay, - animationDelay : animationDelay, transitionDuration : transitionDuration, + animationDelayStyle: animationDelayStyle, + animationDelay : animationDelay, animationDuration : animationDuration }; if(cacheKey) { @@ -905,16 +912,25 @@ angular.module('ngAnimate', ['ng']) if(timings.transitionDuration > 0) { node.style[transitionProp + propertyKey] = ''; - if(ii > 0 && stagger.transitionDelay > 0 && stagger.transitionDuration === 0) { - formerStyle = applyStyle(node, prefix + 'transition-delay: ' + - (ii * stagger.transitionDelay + timings.transitionDelay) + 's'); - } } - if(ii > 0 && stagger.animationDelay > 0 && stagger.animationDuration === 0) { - formerStyle = applyStyle(node, prefix + 'animation-delay: ' + - (ii * stagger.animationDelay + timings.animationDelay) + 's'); + if(ii > 0) { + var staggerStyle = ''; + if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) { + staggerStyle += prefix + 'transition-delay: ' + + prepareStaggerDelay(timings.transitionDelayStyle, stagger.transitionDelay, ii) + '; '; + } + + if(stagger.animationDelay > 0 && stagger.animationDuration === 0) { + staggerStyle += prefix + 'animation-delay: ' + + prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, ii) + '; '; + } + + if(staggerStyle.length > 0) { + formerStyle = applyStyle(node, staggerStyle); + } } + element.addClass(activeClassName); }); @@ -948,6 +964,15 @@ angular.module('ngAnimate', ['ng']) done(); } + function prepareStaggerDelay(delayStyle, staggerDelay, index) { + var style = ''; + angular.forEach(delayStyle.split(','), function(val, i) { + style += (i > 0 ? ',' : '') + + (index * staggerDelay + parseInt(val, 10)) + 's'; + }); + return style; + } + function onAnimationProgress(event) { event.stopPropagation(); var ev = event.originalEvent || event; |
