AngularJS는 단일 페이지 앱을 만드는 훌륭한 방법을 제공합니다. 이러한 이유로 우리 사이트는 기본 모바일 애플리케이션처럼 보입니다. 네이티브 프로그램처럼 보이도록 하려면 ngAnimate 모듈을 사용하여 전환 및 애니메이션 효과를 추가할 수 있습니다.
이 모듈을 사용하면 아름다운 프로그램을 만들 수 있습니다. 오늘은 ng-view에 애니메이션을 적용하는 방법을 살펴보겠습니다.
무엇을 만들 것인가
단일 페이지 프로그램이 있고 이 페이지에 애니메이션 효과를 추가한다고 가정해 보겠습니다. 링크를 클릭하면 한 번의 시도는 밖으로 나가고 다른 한 번의 시도는 안으로 들어가게 됩니다.
사용할 항목:
익스트림 애니메이션: 여기서 사용하는 애니메이션 효과는 위에서 언급한 것입니다. 절묘한 애니메이션 효과는 귀하의 사이트에 많은 색상을 추가할 수 있습니다. 데모 페이지만으로도 우리를 미치게 만들 수 있습니다. *애니메이션 효과는 Codrops의 A Collection of Page Transitions
에서 제공됩니다.어떻게 작동하나요?
ngAnimate가 어떻게 작동하는지 살펴보겠습니다. ngAnimate는 뷰에 들어가거나 나가는지 여부에 따라 다양한 Angular 지시문에 대해 다양한 CSS 클래스 이름을 추가하고 제거합니다. 예를 들어 웹사이트를 로드할 때 ng-view에 채워진 모든 항목은 .ng-enter라는 클래스 이름을 갖게 됩니다.
.ng-enter 클래스 이름에 CSS 애니메이션 효과를 추가하기만 하면 입력 시 애니메이션이 자동으로 적용됩니다.
ngAnimate는 ngRepeat, ngInclude, ngIf, ngSwitch, ngShow, ngHide, ngView 및 ngClass에 적용할 수 있습니다
ngAnimate 기능에 대해 자세히 알아보려면 ngAnimate 설명서를 확인하세요. 다음으로 실제로 작동하는 모습을 살펴보겠습니다.
프로세스 시작
다음 서류가 필요합니다:
index.html부터 시작해 AngularJS, ngRoute 및 ngAnimate를 로드하겠습니다. 그런데 부트스트랩을 사용하여 스타일을 정의하는 것을 잊지 마세요.
<!-- index.html --> <!DOCTYPE html> <html> <head> <!-- CSS --> <!-- load bootstrap (bootswatch version) --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootswatch/3.1.1/readable/bootstrap.min.css"> <link rel="stylesheet" href="style.css"> <!-- JS --> <!-- load angular, ngRoute, ngAnimate --> <script src="http://code.angularjs.org/1.2.13/angular.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-route.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-animate.js"></script> <script src="app.js"></script> </head> <!-- apply our angular app --> <body ng-app="animateApp"> <!-- inject our views using ng-view --> <!-- each angular controller applies a different class here --> <div class="page {{ pageClass }}" ng-view></div> </body> </html>
위는 매우 간단한 HTML 파일입니다. 필요한 리소스를 로드하고, Angular 앱을 정의하고, 삽입한 뷰에 대한 ng-view 클래스 이름을 추가하세요.
필요한 다른 파일을 살펴보겠습니다.
Angular 프로그램 app.js
이제 페이지를 새로 고치지 않고도 페이지를 수정할 수 있도록 라우팅이 포함된 Angular 프로그램을 만들어야 합니다.
// app.js // define our application and pull in ngRoute and ngAnimate var animateApp = angular.module('animateApp', ['ngRoute', 'ngAnimate']); // ROUTING =============================================== // set our routing for this application // each route will pull in a different controller animateApp.config(function($routeProvider) { $routeProvider // home page .when('/', { templateUrl: 'page-home.html', controller: 'mainController' }) // about page .when('/about', { templateUrl: 'page-about.html', controller: 'aboutController' }) // contact page .when('/contact', { templateUrl: 'page-contact.html', controller: 'contactController' }); }); // CONTROLLERS ============================================ // home page controller animateApp.controller('mainController', function($scope) { $scope.pageClass = 'page-home'; }); // about page controller animateApp.controller('aboutController', function($scope) { $scope.pageClass = 'page-about'; }); // contact page controller animateApp.controller('contactController', function($scope) { $scope.pageClass = 'page-contact'; });
이제 애플리케이션, 경로 및 컨트롤러를 만듭니다.
각 컨트롤러에는 자체 pageClass 변수가 있습니다. 변경된 값은 index.html 파일의 ng-view에 추가되어 각 페이지마다 다른 클래스 이름을 갖게 됩니다. 이러한 다양한 클래스 이름을 통해 다양한 페이지에 다양한 애니메이션 효과를 추가할 수 있습니다.
page-home.html, page-about.html, page-contact.html 보기
이 내용은 최대한 명확하고 간단하게 유지되어야 합니다. 각 페이지에 대한 텍스트를 준비하고 다른 페이지에 대한 링크 주소만 준비하면 됩니다.
<!-- page-home.html --> <h1>Angular Animations Shenanigans</h1> <h2>Home</h2> <a href="#about" class="btn btn-success btn-lg">About</a> <a href="#contact" class="btn btn-danger btn-lg">Contact</a> <!-- page-about.html --> <h1>Animating Pages Is Fun</h1> <h2>About</h2> <a href="#" class="btn btn-primary btn-lg">Home</a> <a href="#contact" class="btn btn-danger btn-lg">Contact</a> <!-- page-contact.html --> <h1>Tons of Animations</h1> <h2>Contact</h2> <a href="#" class="btn btn-primary btn-lg">Home</a> <a href="#about" class="btn btn-success btn-lg">About</a>
现在,我们拥有了我们的页面,通过使用Angular的路由功能可以将这些页面注入到我们的主index.html文件中。
现在,所有的乏味的工作已经完成。我们的程序应该可以正常工作,并且可以很好的修改页面。接下来,让我们进入下一步,为页面添加动画效果!
为App添加动画效果 style.css
我们将使用CSS来添加所有的动画效果。这种方法很棒,因为我们所要做的事就是添加ngAnimate,并且不用修改我们的代码就可以添加CSS动画效果。
ngAnimate为我们的ng-view添加的两个类分别是.ng-enter和.ng-leave。你可以想象一些他们各自的作用。
基础样式
为了使我们的程序看起来不那么乏味,我们将会添加一些基础的样式。
/* make our pages be full width and full height */ /* positioned absolutely so that the pages can overlap each other as they enter and leave */ .page { bottom:0; padding-top:200px; position:absolute; text-align:center; top:0; width:100%; } .page h1 { font-size:60px; } .page a { margin-top:50px; } /* PAGES (specific colors for each page) ============================================================================= */ .page-home { background:#00D0BC; color:#00907c; } .page-about { background:#E59400; color:#a55400; } .page-contact { background:#ffa6bb; color:#9e0000; }
通过以上的代码,我们为3个页面添加了基础的样式。当我们点击程序的时候,我们可以看到它们应用了不同的颜色和间距。
CSS 动画
让我们定义我们的动画效果,之后我们将会了解一下当页面进入或离开的时候我们怎么才能为不同的页面应用不用的动画效果。
Vendor Prefixes: 我们将会使用默认的CSS属性,不带任何前缀的。完整的代码会包含所有的前缀。
我们定义了6个不同的动画效果。每一个页面都会有他们各自的ng-enter 和 ng-leave 的动画效果。
/* style.css */ ... /* ANIMATIONS ============================================================================= */ /* leaving animations ----------------------------------------- */ /* rotate and fall */ @keyframes rotateFall { 0% { transform: rotateZ(0deg); } 20% { transform: rotateZ(10deg); animation-timing-function: ease-out; } 40% { transform: rotateZ(17deg); } 60% { transform: rotateZ(16deg); } 100% { transform: translateY(100%) rotateZ(17deg); } } /* slide in from the bottom */ @keyframes slideOutLeft { to { transform: translateX(-100%); } } /* rotate out newspaper */ @keyframes rotateOutNewspaper { to { transform: translateZ(-3000px) rotateZ(360deg); opacity: 0; } } /* entering animations --------------------------------------- */ /* scale up */ @keyframes scaleUp { from { opacity: 0.3; -webkit-transform: scale(0.8); } } /* slide in from the right */ @keyframes slideInRight { from { transform:translateX(100%); } to { transform: translateX(0); } } /* slide in from the bottom */ @keyframes slideInUp { from { transform:translateY(100%); } to { transform: translateY(0); } }
结合以上我们所定义的动画效果,我们将会把它们应用到我们的页面上。
进入和离开动画效果
我们只需要将这些动画效果应用给.ng-enter 或 .ng-leave就可以为我们的页面添加不用的动画效果。
/* style.css */ ... .ng-enter { animation: scaleUp 0.5s both ease-in; z-index: 8888; } .ng-leave { animation: slideOutLeft 0.5s both ease-in; z-index: 9999; } ...
现在,我们的程序就会有像上面那样的动画效果了。当离开的时候,页面会向左滑出,当进入的时候会放大。我们还添加了z-index属性,以便离开的页面会处于进入的页面的上层。
让我们看一下如何为具体的页面创建动画。
具体页面的动画效果
我们为不同的页面创建了各自的Angular 控制器。在这些控制器里面,我们添加了一个pageClass并且将它添加到我们的08c7689d8bf8fe33141f270e3fd6c1d5中。我们将会使用这些类名来引出具体的页面。
不像上面的.ng-enter 和 .ng-leave那样,我们使它们更加具体化。
... .ng-enter { z-index: 8888; } .ng-leave { z-index: 9999; } /* page specific animations ------------------------ */ /* home -------------------------- */ .page-home.ng-enter { animation: scaleUp 0.5s both ease-in; } .page-home.ng-leave { transform-origin: 0% 0%; animation: rotateFall 1s both ease-in; } /* about ------------------------ */ .page-about.ng-enter { animation:slideInRight 0.5s both ease-in; } .page-about.ng-leave { animation:slideOutLeft 0.5s both ease-in; } /* contact ---------------------- */ .page-contact.ng-leave { transform-origin: 50% 50%; animation: rotateOutNewspaper .5s both ease-in; } .page-contact.ng-enter { animation:slideInUp 0.5s both ease-in; } ...
现在,每一个页面都有它各自唯一的进入和离开的动画效果。
总结
为我们的Angular程序添加动画效果是相当容易的。你所需要做的就是加载ngAnimate并创建你的CSS动画效果。真诚的希望这篇文章可以帮助你了解一些使用ng-view时的一些比较酷的动画效果。
View Code : http://plnkr.co/edit/uW4v9T?p=info