2016-03-31 6 views
0

Nicht glatt tweening von Greensock JavaScript in Angular-Animation Klasse

"use strict"; 
 
angular.module("app", ['ngAnimate']) 
 
    .controller('appCtrl', function($scope, $timeout) { 
 

 
    $timeout(function() { 
 
     $scope.currentIndex = 0; 
 
    }); 
 

 
    $scope.isCurrentIndex = function(index) { 
 
     return $scope.currentIndex === index; 
 
    } 
 

 
    $scope.setCurrentIndex = function(index) { 
 
     $scope.currentIndex = index; 
 

 
    } 
 

 
    }) 
 
    .animation('.navModalCircleTransition', function() { 
 
    return { 
 
     addClass: function(element, className, done) { 
 

 
     if (className === 'active') { 
 
      TweenMax.set(element, { 
 
      background: "#000000" 
 
      }); 
 
      TweenMax.to(element, 1, { 
 
      background: "#C32026", 
 
      onComplete: done 
 
      }); 
 

 
     } else { 
 
      done(); 
 
     } 
 
     }, 
 
     removeClass: function(element, className, done) { 
 
     if (className === 'active') { 
 
      TweenMax.set(element, { 
 
      background: "#C32026" 
 
      }); 
 
      TweenMax.to(element, 1, { 
 
      background: "#000000", 
 
      onComplete: done 
 
      }); 
 

 
     } else { 
 
      done(); 
 
     } 
 
     } 
 
    } 
 
    });
.navModalCircleContainer { 
 
    display: flex; 
 
    justify-content: space-between; 
 
    padding: 0 25%; 
 
} 
 
.navModalCircle { 
 
    height: 25px; 
 
    width: 25px; 
 
    border-radius: 100%; 
 
    background: #000000; 
 
}
<div ng-app="app"> 
 
    <div ng-controller="appCtrl"> 
 

 
    <div class="navModalCircleContainer"> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(0)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(1)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(2)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(3)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(4)}"></div> 
 
    </div> 
 

 
    <br /> 
 
    <button type="button" ng-click="setCurrentIndex(0)">set currentIndex = 0</button> 
 

 
    <br /> 
 
    <br /> 
 

 

 
    <button type="button" ng-click="setCurrentIndex(1)">set currentIndex = 1</button> 
 
    <br /> 
 
    <br /> 
 

 

 
    <button type="button" ng-click="setCurrentIndex(2)">set currentIndex = 2</button> 
 
    <br /> 
 
    <br /> 
 

 

 
    <button type="button" ng-click="setCurrentIndex(3)">set currentIndex = 3</button> 
 
    <br /> 
 
    <br /> 
 

 

 
    <button type="button" ng-click="setCurrentIndex(4)">set currentIndex = 4</button> 
 
    <br /> 
 
    <br /> 
 

 
    </div> 
 
</div> 
 

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.2/angular.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular-animate.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.18.2/TweenMax.min.js"></script>

Meine Übergänge sind nicht mit diesem Javascript Greensock Animation glatt, und ich versuche, herauszufinden, warum? Sehr reduziertes Problem hier mit hoffentlich einfacher Antwort. Ich rufe die addClass- und removeClass-Teile der angularen Animationsklasse navModalCircleTransition auf, aber der von Greensock gerenderte Übergang ist nicht glatt. Seltsames Zeug. Alles andere funktioniert gut. So etwas habe ich noch nie gesehen. Was vermisse ich?

+0

Ein Plünderer/Geige, um das Problem zu replizieren, kann helfen. – estus

+1

Ändern Sie den Hintergrund in 'backgroundColor'. siehe ** [this] (http://greensock.com/docs/#/HTML5/GSAP/Plugins/CSSPlugin/) **. –

+0

@Tahir Ahmed, danke. Du hast es. Wenn Sie eine Antwort liefern, werde ich Ihnen gutschreiben. –

Antwort

1

Wieder Buchung als Antwort.

Von TweenMax der CSSPlugin Dokumentation:

ein häufiger Fehler Kamel Fall Darstellungen der Eigenschaften ... In diesem Fall

zu verwenden, zu vergessen ist, ändere background-backgroundColor fixen die Ausgabe und animiert wie erwartet.

Snippet:

"use strict"; 
 
angular.module("app", ['ngAnimate']) 
 
    .controller('appCtrl', function($scope, $timeout) { 
 
    $timeout(function() { 
 
     $scope.currentIndex = 0; 
 
    }); 
 
    $scope.isCurrentIndex = function(index) { 
 
     return $scope.currentIndex === index; 
 
    } 
 
    $scope.setCurrentIndex = function(index) { 
 
     $scope.currentIndex = index; 
 

 
    } 
 
    }) 
 
    .animation('.navModalCircleTransition', function() { 
 
    return { 
 
     addClass: function(element, className, done) { 
 
     if (className === 'active') { 
 
      TweenMax.to(element, 0.4, { 
 
      backgroundColor: '#C32026', 
 
      onComplete: done 
 
      }); 
 
     } else { 
 
      done(); 
 
     } 
 
     }, 
 
     removeClass: function(element, className, done) { 
 
     if (className === 'active') { 
 
      TweenMax.to(element, 0.4, { 
 
      backgroundColor: '#000000', 
 
      onComplete: done 
 
      }); 
 
     } else { 
 
      done(); 
 
     } 
 
     } 
 
    } 
 
    });
.navModalCircleContainer { 
 
    display: flex; 
 
    justify-content: space-between; 
 
    padding: 0 25%; 
 
} 
 
.navModalCircle { 
 
    height: 25px; 
 
    width: 25px; 
 
    border-radius: 100%; 
 
    background: #000000; 
 
}
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.2/angular.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular-animate.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.18.2/TweenMax.min.js"></script> 
 
<div ng-app="app"> 
 
    <div ng-controller="appCtrl"> 
 
    <div class="navModalCircleContainer"> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(0)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(1)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(2)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(3)}"></div> 
 
     <div class="navModalCircle navModalCircleTransition" ng-class="{active: isCurrentIndex(4)}"></div> 
 
    </div> 
 
    <br /> 
 
    <button type="button" ng-click="setCurrentIndex(0)">set currentIndex = 0</button> 
 
    <br /> 
 
    <br /> 
 
    <button type="button" ng-click="setCurrentIndex(1)">set currentIndex = 1</button> 
 
    <br /> 
 
    <br /> 
 
    <button type="button" ng-click="setCurrentIndex(2)">set currentIndex = 2</button> 
 
    <br /> 
 
    <br /> 
 
    <button type="button" ng-click="setCurrentIndex(3)">set currentIndex = 3</button> 
 
    <br /> 
 
    <br /> 
 
    <button type="button" ng-click="setCurrentIndex(4)">set currentIndex = 4</button> 
 
    <br /> 
 
    <br /> 
 
    </div> 
 
</div>

Hoffnung, das hilft.

+1

Danke nochmal Tahir. Schönes Wochenende. –