aboutsummaryrefslogtreecommitdiffstats
path: root/src/ngAnimate/animate.js
diff options
context:
space:
mode:
authorMatias Niemelä2013-10-31 11:49:06 -0700
committerMatias Niemelä2013-11-05 21:44:25 -0500
commit41a2d5b30f4feb90651eb577cf44852a6d2be72c (patch)
tree1bc4f99553a0acc140ee36e3ea15be235e7d07c3 /src/ngAnimate/animate.js
parente53ff431e1472c0b2d5405d267d4e403ca31087e (diff)
downloadangular.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.js47
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;