Chapter 3: Creating addClass animations with ngShow

by billy roberts

HTML

<script src="https://code.angularjs.org/1.3.2/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.2/angular-animate.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<div ng-app="myApp">
    <div ng-controller="Ctrl">
        <button ng-click="displayToggle=!displayToggle">
            Toggle Visibility
        </button>
        <div class="animate-container" ng-show="displayToggle">
            Fade me out!
        </div>
    </div>
</div>

JavaScript

// ...and java script

angular.module('myApp', ['ngAnimate'])
.controller('Ctrl', function($scope) {
    $scope.displayToggle = true;
})
.animation('.animate-container', function() {
    return {
        addClass: function(element, className, done) {
            if (className==='ng-hide') {
                $(element)
                .removeClass('ng-hide')
                .css('opacity', 1)
                .animate(
                    {'opacity': 0}, 
                    1000, 
                    function() {
                        $(element)
                        .addClass('ng-hide')
                        .css('opacity', 1);
                        done();
                    }
                );
            } else {
                done();
            }
        }
    };
});