angular的ngAnimate主要是依照不同的Directive
,對照不同的class
做切換,以下有一張官方提供的對照表:
Directive | Supported Animations |
---|---|
ngRepeat | enter,leave and move |
ngView | enter and leave |
ngInclude | enter and leave |
ngSwitch | enter and leave |
ngIf | enter and leave |
ngClass | add and remove |
ngShow & ngHide | add and remove (the ng-hide class value) |
比較值得注意的是,angular(1.2)以上的版本,是依據directive
的目前的status,替換不同的class
,它會在每個不同的status加上ng-....
的class,如ng-enter
和ng-leave
等的。
以ngRepeat
為例,定義一個html結構:
1 | <ul> |
加入一個值到roles
:
1 | $scope.roles.push( "programer" ); |
則此時會先插入一個ng-enter
的class
,做初始配置用,接著在插入ng-enter-active
的class,改變後的狀態,只有設定transition
,這時就會產生動畫效果。
依照element的class名稱,css的配置如下:
1 | .demo.ng-enter { |
若是不支援css3的瀏覽器,則必須自己實作動畫效果:
1 | app.animation('.demo', function() { |
如果要使用到jquery
來做特效,需在angular
載入之前,先行載入jquery
,因為angular
會判斷要使用jquery
或jqlite
,然後再做一些處理。若要使用jquery
改變顏色,則需要額外載入jquery-color
。另外如果同時用javascript和css實作特效,則css特效會被javascript所覆蓋。
Example
Install
1 | bower install angular angular-animate jquery jquery-color |
Create a angular app and load a ngAnimate module( app.js ):
1 | var app = angular.module('angularNgApp', ["ngAnimate"]); |
html:
1 |
|
main.css:
1 | .demo.ng-enter { |
controller.js:
1 | app.controller('MainCtrl', function ( $scope, $timeout ) { |
animation.js:
1 | app.animation('.demo', function() { |