diff options
| author | Peter Deak | 2013-11-10 21:36:47 +0000 | 
|---|---|---|
| committer | Matias Niemelä | 2013-11-21 23:37:01 -0500 | 
| commit | c42d0a041890b39fc98afd357ec1307a3a36208d (patch) | |
| tree | 4c9853aaa18ed3538d96117d297235fc1335d83e /src/ngAnimate | |
| parent | 3fbb25e25cc9bd1ddad8efab9f43749735e53454 (diff) | |
| download | angular.js-c42d0a041890b39fc98afd357ec1307a3a36208d.tar.bz2 | |
fix(ngAnimate): correctly retain and restore existing styles during and after animation
Closes #4869
Diffstat (limited to 'src/ngAnimate')
| -rw-r--r-- | src/ngAnimate/animate.js | 25 | 
1 files changed, 10 insertions, 15 deletions
| diff --git a/src/ngAnimate/animate.js b/src/ngAnimate/animate.js index 81d20043..26d48012 100644 --- a/src/ngAnimate/animate.js +++ b/src/ngAnimate/animate.js @@ -876,13 +876,6 @@ angular.module('ngAnimate', ['ng'])          }, 10, false);        } -      function applyStyle(node, style) { -        var oldStyle = node.getAttribute('style') || ''; -        var newStyle = (oldStyle.length > 0 ? '; ' : '') + style; -        node.setAttribute('style', newStyle); -        return oldStyle; -      } -        function getElementAnimationDetails(element, cacheKey) {          var data = cacheKey ? lookupCache[cacheKey] : null;          if(!data) { @@ -1057,10 +1050,9 @@ angular.module('ngAnimate', ['ng'])          var maxDelayTime = Math.max(timings.transitionDelay, timings.animationDelay) * 1000;          var startTime = Date.now();          var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT; -        var formerStyle;          var ii = data.ii; -        var applyFallbackStyle, style = ''; +        var applyFallbackStyle, style = '', appliedStyles = [];          if(timings.transitionDuration > 0) {            var propertyStyle = timings.transitionPropertyStyle;            if(propertyStyle.indexOf('all') == -1) { @@ -1068,6 +1060,8 @@ angular.module('ngAnimate', ['ng'])              var fallbackProperty = $sniffer.msie ? '-ms-zoom' : 'border-spacing';              style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ', ' + fallbackProperty + '; ';              style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ', ' + timings.transitionDuration + 's; '; +            appliedStyles.push(CSS_PREFIX + 'transition-property'); +            appliedStyles.push(CSS_PREFIX + 'transition-duration');            }          } else {            unblockKeyframeAnimations(element); @@ -1082,16 +1076,19 @@ angular.module('ngAnimate', ['ng'])              style += CSS_PREFIX + 'transition-delay: ' +                       prepareStaggerDelay(delayStyle, stagger.transitionDelay, ii) + '; '; +            appliedStyles.push(CSS_PREFIX + 'transition-delay');            }            if(stagger.animationDelay > 0 && stagger.animationDuration === 0) {              style += CSS_PREFIX + 'animation-delay: ' +                       prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, ii) + '; '; +            appliedStyles.push(CSS_PREFIX + 'animation-delay');            }          } -        if(style.length > 0) { -          formerStyle = applyStyle(node, style); +        if(appliedStyles.length > 0) { +          var oldStyle = node.getAttribute('style') || ''; +          node.setAttribute('style', oldStyle + ' ' + style);          }          element.on(css3AnimationEvents, onAnimationProgress); @@ -1104,10 +1101,8 @@ angular.module('ngAnimate', ['ng'])            element.off(css3AnimationEvents, onAnimationProgress);            element.removeClass(activeClassName);            animateClose(element, className); -          if(formerStyle != null) { -            formerStyle.length > 0 ? -              node.setAttribute('style', formerStyle) : -              node.removeAttribute('style'); +          for (var i in appliedStyles) { +            node.style.removeProperty(appliedStyles[i]);            }          }; | 
