Chapter 3: Creating leave and concurrent animations with ng-view

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.angularjs.org/1.3.2/angular-route.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<div ng-app="myApp">
    <ng-view class="animate-container"></ng-view>
    <div class="link-container"> 
        <a href="#/foo">Foo</a>
        <a href="#/d">d</a>
    </div>
    
    <script type="text/ng-template" id="foo.html">
        <div>
            <span>Foo</span>
        </div>
    </script>
    <script type="text/ng-template" id="d.html">
        <div>
            <span>Bar</span>
        </div>
    </script>
</div>

CSS

.link-container {
    position:absolute;
    top:320px;
}
.animate-container {
    position:absolute;
}
.animate-container div {
    width:300px;
    text-align:center;
    line-height:300px;
    border:1px solid black;
}

JavaScript

angular.module('myApp', ['ngAnimate', 'ngRoute'])
.config(function ($routeProvider) {
    $routeProvider
    .when('/bar', {
        templateUrl: 'd.html'
    })
    .otherwise({
        templateUrl: 'foo.html'
    });
})
.animation('.animate-container', function() {
    return {
        enter: function(element, done) {
            $(element)
            .css({
                'top': '-300px'
            });
            $(element)
            .delay(500)
            .animate({
                'top': '0px'
            }, 500, done);
        },
        leave: function(element, done) {
            $(element)
            .css({
                'top': '0px'
            });
            $(element)
            .animate({
                'top': '-300px'
            }, 500, done);
        }
    };
});