簡體   English   中英

AngularJS如何為身體背景(CSS或JS)設置動畫?

[英]AngularJS how to animate body background (CSS or JS)?

當視圖更改時,我想為背景圖像設置動畫。 背景圖像當前由MainController中定義的函數設置-看起來像這樣:

// app/js/controllers.js

$scope.getBg = function() {
  return $route.current.scope.pageBg || 'bg-intro';
};

它只是返回一個應該應用於主體的類名(在每個Controller中分別定義了“ pageBg”):

// app/index.html
<body ng-class="getBg()">
...
</body>

CSS類看起來像這樣:

.bg-intro {
  background: #4d4638 url(../img/home.jpg) no-repeat top center;
}

我嘗試了CSS和JS兩種方法來解決此問題,但均未成功。

CSS:

/* app/css/animations.css */

.bg-intro.ng-enter,
.bg-intro.ng-leave {
background: #ffffff;
}

.bg-intro.ng-enter {
animation: 0.5s fade-in;
}

.bg-intro.ng-leave {
animation: 0.5s fade-out;
}

@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}

@keyframes fade-out {
from { opacity: 1; }
to { opacity: 0; }
}

JS(帶有Greensock):

.animation('.bg-intro', function() {
    return {
        enter: function(element, done) {
            TweenMax.set(element, { backgroundColor:"#ffffff"});
            TweenMax.from(element, .5, {alpha:0, ease:Power2.easeInOut, onComplete:done});

            return function(cancel) {
                if(cancel) {
                    element.stop();
                }
            };
        },

        leave: function(element, done) {
            TweenMax.set(element, { backgroundColor:"#ffffff"});
            TweenMax.to(element, .5, {alpha:0, ease:Power2.easeInOut, onComplete:done});

            return function(cancel) {
                if(cancel) {
                    element.stop();
                }
            };
        }
    }})

我認為這將是一件容易的事,但不幸的是,這似乎對我來說很難。

在使用ng-show等指令時會應用ng-enterng-leave 。在這種情況下,您只是在應用樣式,因此您可以在后台通過簡單的CSS過渡來實現您想要的功能身體元素:

body{
  transition: background ease-in-out 0.5s;
}

我推薦這篇文章 ,以更全面地了解Angular動畫。

您必須創建一個動畫背景的工廠,完成后工廠需要返回承諾。 然后,使用類似Angular UI-Router的工具,您可以在更改視圖之前請求Promise。 這是我的頁腳在過渡視圖時為打開和關閉設置動畫的概念的示例。

angular.module('App.factory', []).factory("footerUtility", function($window){
var element = document.getElementById('footer-wrapper');
return {
    open : function() {
        TweenMax.to(element,1, {
            delay:1.5,
            maxHeight: '300',
            height: 'auto',
            width: '100%',
            marginTop:'0px',
            overflow: 'hidden',
            ease: Cubic.easeInOut
        });


    },
    close : function(deferred) {
        TweenMax.to(element, .500, { delay:0,maxHeight: 0, height: 0,width: '100%', overflow: 'hidden', ease: Cubic.easeInOut,
            onComplete:function(){
                $window.scrollTo(0,0);
                deferred.resolve('complete');
            }});
    }
}
});

然后,您將使用角度UI-Router設置進入和離開以及resolove。 像這樣:

'use strict';
angular.module('App.home', [])
.config(
['$stateProvider', '$locationProvider', '$urlRouterProvider',
    function ($stateProvider, $locationProvider, $urlRouterProvider) {
        $urlRouterProvider.otherwise('/home');

        $stateProvider.state("home", {
            abstract: false,
            url: "/home",
            controller: 'homeCtrl',
            templateUrl: 'partials/home.html',
            onExit: ['footerUtility'],
            onEnter: ['footerUtility',
                function (footerUtility) {
                    footerUtility.open();
                }],
            resolve:['footerUtility', '$q', function(footerUtility, $q){
                var deferred = $q.defer();
                footerUtility.close(deferred);
                return deferred.promise;
            }]
        })
    }]
).controller('homeCtrl', ['$scope','$stateParams', '$http', '$location', '$timeout', function($scope, $stateParams, $http, $location, $timeout) {


}]);

希望這是一個足夠好的示例,可以幫助您了解基礎知識。 您還可以將顏色或url傳遞到您的工廠中,以便您可以指定在出門,進路等過程中更改的主體背景。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM