Не удается заставить анимацию AngularJS работать при смене вида

#javascript #angularjs #angularjs-animation

#javascript #angularjs #angularjs-анимация

Вопрос:

Я прочитал документы AngularJS, выполнил несколько руководств, включая scotch и moo. Я могу запустить их пример кода.

Однако, я, кажется, не понимаю, что является триггером для Angular для применения стилей CSS для создания анимаций. Я понимаю, что angular 1.2 ДОЛЖЕН применять их автоматически, но, похоже, у меня это не работает.

Моя цель — анимировать смену видов (и, следовательно, контроллеров). Я не показываю содержимое для вложенных представлений или другого CSS, но могу, если потребуется.

Ниже приведен код:

Вот JS

 var triStartApp = angular.module('triStartApp', ['ngAnimate', 'ngRoute']);
// create the controller and inject Angular's $scope
// configure our routes
routeFunction = function($routeProvider) {

    $routeProvider.when('/', {
        templateUrl: 'html/home.html',
        controller: 'mainController'
    });

    // route for the about page
    $routeProvider.when('/about', {
        templateUrl: 'html/about.html',
        controller: 'aboutController'
    });    
};

triStartApp.config(routeFunction);

// create the controller and inject Angular's $scope
triStartApp.controller('mainController', function($scope) {
    // create a message to display in our view
    $scope.message = 'Everyone come and see how good I look!';
});

triStartApp.controller('aboutController', function($scope) {
    $scope.message = 'Look! I am an about page.';
});
  

Вот CSS:

 .view.ng-enter {
  animation:view_enter 1s;
}

@keyframes view_enter {
  0% { left:100%; }
  30% { left:80%; }
  100% { left:0; }
}

.view.ng-leave {
  animation:view_leave 1s;
}
@keyframes view_leave {
  0% { left:0; }
  30% { left:-50px; }
  100% { left:-100%; }
}
  

Вот HTML:

 <html lang="en" ng-app="triStartApp">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">
        <!-- <link rel="shortcut icon" href="../../assets/ico/favicon.ico"> -->

        <title>TriStart</title>

        <!-- Bootstrap core CSS -->
        <link href="/css/bootstrap.min.css" rel="stylesheet">

        <!-- Custom styles for "cover" template -->
        <link href="/css/cover.css" rel="stylesheet">
        <link href="/css/animations.css" rel="stylesheet">

        <!-- Custom styles for tristart  -->
        <link href="/css/tristart.css" rel="stylesheet">    

    </head>

    <body ng-controller="mainController">          

        <div class="site-wrapper">

            <div class="site-wrapper-inner">

                <div class="cover-container">

                    <div class="masthead clearfix">

                        <div class="inner">
                            <h2 class="masthead-brand">TriStart</h2>
                            <ul class="nav masthead-nav">
                                <li class="active"><a href="#">Home</a></li>
                                <li><a href="#about">About</a></li>
                            </ul>
                        </div>

                        <div class="row">
                            <div class="col-md-12">
                                <p class="tristart-lead">(triangle startup resources)</p>                       
                            </div>                        
                        </div>                        
                    </div>


                    <div id="main" >
                        {{ message }}  
                        <!-- angular templating -->
                        <!-- angular templating -->
                        <!-- this is where content will be injected -->
                        <div>
                            <div class="view" ng-view></div>
                        </div>

                    </div>

                </div>

            </div>

        </div>

        <!-- Bootstrap core JavaScript
        ================================================== -->
        <!-- Placed at the end of the document so the pages load faster -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-route.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-animate.js"></script>
        <script src="/js/script.js"></script>             
        <script src="/js/lib/bootstrap.min.js"></script>
        <script src="/js/lib/docs.min.js"></script>
    </body>
</html>
  

Ответ №1:

Если вы не делаете сложную пользовательскую анимацию, вы могли бы рассмотреть возможность использования ng-fx.