ngAnimate插件是做什么的?
ngAnimate插件如其名字一樣是為元素提供動畫的
怎么定義動畫?
第一步必須是引入插件
<script src="http://cdn.bootcss.com/angular.js/1.3.20/angular.js"></script>
<script src="http://cdn.bootcss.com/angular.js/1.3.20/angular-animate.min.js"></script>
第二步讓app引入(依賴)這個插件
var appH5=angular.module("app",['ngAnimate']);
appH5.controller("myTabCtrl",['$scope',function($scope){
$scope.isShow=true;
}])
<body ng-controller="myTabCtrl">
<input type="checkbox" ng-model="isShow" />
<div class="new-item" ng-if="isShow">我是要動畫的元素</div>
</body>
添加動畫的第一種方式:通過css3.0的方式
- 樣式定義示例
.new-item{
padding: 10px;
border-bottom: 1px solid #ededed;
font-size: 1.5rem;
position: relative;
transition:all 0.5s;
}
/*元素進入頁面初始狀態(tài)*/
.new-item.ng-enter{
top: 10px;
}
/*進入頁面動畫后的最終狀態(tài)*/
.new-item.ng-enter-active{
top: 0px;
}
/*元素移出頁面初始狀態(tài)*/
.new-item.ng-leave{
opacity:1;
}
/*移出頁面動畫后的最終狀態(tài)*/
.new-item.ng-leave-active{
opacity:0;
}
//html
<div class="new-item">我是要動畫的元素</div>
-
為什么添加樣式就可以產(chǎn)生動畫?
當元素進入頁面時币呵,angular會給元素依次添加上class ng-enter 和 ng-enter-active,相信大家都知道,CSS3.0在一個元素定義了 transition 之后逗威,兩個相同屬性的屬性值改變就會用過渡動畫來實現(xiàn)屬性值的改變。當元素移除頁面時也是同理岔冀,所以我們只要定義元素的四個class來定義這四個時間點的狀態(tài)凯旭,其他的就交給angular來做就好了。
支持這種方式定義動畫的指令有哪些使套?
ng-if罐呼、ng-view、ng-repeat侦高、ng-include嫉柴、ng-switch
這幾個指令是通過新建節(jié)點和移除節(jié)點來實現(xiàn)元素的顯示和隱藏的ng-repate的不同之處
.new-item{
padding: 10px;
border-bottom: 1px solid #ededed;
font-size: 1.5rem;
position: relative;
transition:all 0.5s;
}
.new-item.ng-enter{
top: 10px;
}
.new-item.ng-enter-active{
top: 0px;
}
.new-item.ng-enter-stagger{/*ng-repeat提供了這個樣式,來實現(xiàn)每一個item條目的依次執(zhí)行某個動畫 */
animation-delay:100ms;
-webkit-animation-delay:100ms;
}
.new-item.ng-leave{
opacity:1;
}
.new-item.ng-leave-active{
opacity:1;
}
.new-item.ng-leave-stagger{
animation-delay:100ms;
-webkit-animation-delay:100ms;
}
//html
<div class="new-item" ng-repeat="new in news">{{new.title}}</div>
剛才說通過新建和刪除元素來實現(xiàn)的指令是可以進行動畫的奉呛,那么只是更改樣式顯示或者隱藏元素的指令(ng-show ng-hide ng-class )能不能進行動畫呢计螺?
.new-item{
padding: 10px;
border-bottom: 1px solid #ededed;
font-size: 1.5rem;
position: relative;
transition:all 2s;
}
/*元素隱藏初始狀態(tài)*/
.new-item.ng-hide-add{
opacity:1;
}
/*隱藏操作動畫后的最終狀態(tài)*/
.new-item.ng-hide-add-active{
opacity:0;
}
/*元素顯示初始狀態(tài)*/
.new-item.ng-hide-remove{
top: 10px;
}
/*顯示操作動畫后的最終狀態(tài)*/
.new-item.ng-hide-remove-active{
top: 0px;
}
添加動畫的第二種方式:通過js的方式
//ng-if、ng-view瞧壮、ng-repeat登馒、ng-include、ng-switch 指令
appH5.animation(".new-item",function(){
return {
leave:function(element,done){
//第一個參數(shù)是運動的元素馁痴,第二個參數(shù)是動畫完成后的回調(diào),必須調(diào)用的肺孤,不調(diào)用則指令功能不會執(zhí)行
$(element).animate({width:0,height:0},1000,done);//借助jQuery
},
enter:function(element,done){
$(element).css({width:100,height:100});//借助jQuery
$(element).animate({width:100,height:100},1000,done)//借助jQuery
}
}
});
//ng-show ng-hide ng-class 指令
appH5.animation(".new-item",function(){
return {
addClass:function(element,sClass,done){
//第一個參數(shù)是運動的元素
//第二個參數(shù)是元素的樣式-->一般用不上
//第三個參數(shù)是動畫完成后的回調(diào)罗晕,必須調(diào)用的济欢,不調(diào)用則指令功能不會執(zhí)行
$(element).animate({width:0,height:0},1000,done)
},
removeClass:function(element,sClass,done){
$(element).css({width:100,height:100});
$(element).animate({width:100,height:100},1000,done)
}
}
});