angular中的動畫效果


用angular來形成動畫效果的代碼如下

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background: red;
        }
    </style>
    <script src="angular.min.js"></script>
    <script src="angular-animate.js"></script>
    <script src="jquery-1.11.3.min.js"></script>
    <script>
        //把angular中模塊名和要引入的依賴模塊寫入
        var app = angular.module('app',['ngAnimate']);
        //angular中的控制台。先讓div顯示以便更好觀察效果
        app.controller('ctrl',function($scope){
           $scope.btn = true;
        });
        //要形成動畫效果的元素
        app.animation('.box',function(){
            //返回效果元素
            return {
                enter:function(element,done){
                    //出現時的初始值
                    $(element).css({'width': 0, 'height': 0});
                    //結束時的最終樣式
                    $(element).stop().animate({'width': 100, 'height': 100}, 1000);
                },
                leave:function(element,done){
                    //消失時最終的效果
                    $(element).stop().animate({'width': 0, 'height': 0}, 1000, done);
                }
            }
        });

    </script>
</head>
<body ng-controller="ctrl">
<input type="checkbox"  ng-model="btn">

<div class="box" ng-if="btn"></div>
</body>
</html>

這樣我們就可以通過angular來形成動畫效果了,並且ngAnimate模型還可以添加或移除class

ngAnimate 模型其實並不能使 HTML 元素產生動畫,但是 ngAnimate 會監測事件,類似隱藏顯示 HTML 元素 ,如果事件發生 ngAnimate 就會使用預定義的 class 來設置 HTML 元素的動畫。

 

AngularJS 添加/移除 class 的指令:

  • ng-show
  • ng-hide
  • ng-class
  • ng-view
  • ng-include
  • ng-repeat
  • ng-if
  • ng-switch

ng-show 和 ng-hide 指令用於添加或移除 ng-hide class 的值。

其他指令會在進入 DOM 會添加 ng-enter 類,移除 DOM 會添加 ng-leave 屬性。

當 HTML 元素位置改變時,ng-repeat 指令同樣可以添加 ng-move 類 。

此外, 在動畫完成后,HTML 元素的類集合將被移除。例如: ng-hide 指令會添加一下類:

  • ng-animate
  • ng-hide-animate
  • ng-hide-add (如果元素將被隱藏)
  • ng-hide-remove (如果元素將顯示)
  • ng-hide-add-active (如果元素將隱藏)
  • ng-hide-remove-active (如果元素將顯示)
下面我們看一個實例:
<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background: red;
            transition: all 1s ease;
        }

        .box.ng-leave {
            opacity: 1;
        }

        .box.ng-leave-active {
            opacity: 0;
        }

        .box.ng-enter {
            opacity: 0;
        }
        .box.ng-enter-active{
            opacity: 1;
        }
    </style>
    <script src="angular.min.js"></script>
    <script src="angular-animate.js"></script>
    <script>
        var app = angular.module('app',['ngAnimate']);
        app.controller('ctrl',function($scope){
           $scope.btn = true;
        });

    </script>
</head>
<body ng-controller="ctrl">
<input type="checkbox"  ng-model="btn">

<div class="box" ng-if="btn"></div>
</body>
</html>
這個實例主要標明:當你復選框選中時,讓div背景透明度等於0慢慢變成1顯示;
         當你沒選中復選框時,讓div背景透明度等於1慢慢變成0隱藏;
但是這兩個在我們快速點擊的時候會形成一個bug,那就是因為上一個沒有執行完而形成好幾個正在過度的過程。
如果要解決這個bug的方法其實也挺簡單,那就是在執行前先暫停一下。下面是代碼;
 $(element).stop().animate({'width': 0, 'height': 0}, 1000, done);
不足之處望大家原諒
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM