@@ -560,6 +560,7 @@ angular.module('ngAnimate', ['ng'])
560
560
561
561
var durationKey = 'Duration' ,
562
562
propertyKey = 'Property' ,
563
+ delayKey = 'Delay' ,
563
564
animationIterationCountKey = 'IterationCount' ,
564
565
ELEMENT_NODE = 1 ;
565
566
@@ -593,6 +594,12 @@ angular.module('ngAnimate', ['ng'])
593
594
if ( element . nodeType == ELEMENT_NODE ) {
594
595
var elementStyles = $window . getComputedStyle ( element ) || { } ;
595
596
597
+ var transitionDelay = Math . max ( parseMaxTime ( elementStyles [ w3cTransitionProp + delayKey ] ) ,
598
+ parseMaxTime ( elementStyles [ vendorTransitionProp + delayKey ] ) ) ;
599
+
600
+ var animationDelay = Math . max ( parseMaxTime ( elementStyles [ w3cAnimationProp + delayKey ] ) ,
601
+ parseMaxTime ( elementStyles [ vendorAnimationProp + delayKey ] ) ) ;
602
+
596
603
var transitionDuration = Math . max ( parseMaxTime ( elementStyles [ w3cTransitionProp + durationKey ] ) ,
597
604
parseMaxTime ( elementStyles [ vendorTransitionProp + durationKey ] ) ) ;
598
605
@@ -605,17 +612,18 @@ angular.module('ngAnimate', ['ng'])
605
612
1 ) ;
606
613
}
607
614
608
- transitionTime = Math . max ( transitionDuration , transitionTime ) ;
609
- animationTime = Math . max ( animationDuration , animationTime ) ;
615
+ transitionTime = Math . max ( transitionDelay + transitionDuration , transitionTime ) ;
616
+ animationTime = Math . max ( animationDelay + animationDuration , animationTime ) ;
610
617
}
611
618
} ) ;
612
619
613
620
/* there is no point in performing a reflow if the animation
614
621
timeout is empty (this would cause a flicker bug normally
615
622
in the page */
616
- var totalTime = Math . max ( transitionTime , animationTime ) ;
617
- if ( totalTime > 0 ) {
618
- var node = element [ 0 ] ;
623
+ var maxTime = Math . max ( transitionTime , animationTime ) * 1000 ;
624
+ if ( maxTime > 0 ) {
625
+ var node = element [ 0 ] ,
626
+ startTime = Date . now ( ) ;
619
627
620
628
//temporarily disable the transition so that the enter styles
621
629
//don't animate twice (this is here to avoid a bug in Chrome/FF).
@@ -659,7 +667,14 @@ angular.module('ngAnimate', ['ng'])
659
667
}
660
668
661
669
function onAnimationProgress ( event ) {
662
- ( event . elapsedTime || ( event . originalEvent && event . originalEvent . elapsedTime ) ) >= totalTime && done ( ) ;
670
+ event . stopPropagation ( ) ;
671
+ var ev = event . originalEvent || event ;
672
+ /* $manualTimeStamp is a mocked timeStamp value which is set
673
+ * within browserTrigger(). This is only here so that tests can
674
+ * mock animations properly. Real events fallback to event.timeStamp. */
675
+ if ( ( ev . $manualTimeStamp || ev . timeStamp ) - startTime >= maxTime ) {
676
+ done ( ) ;
677
+ }
663
678
}
664
679
665
680
function parseMaxTime ( str ) {
0 commit comments