javascript - AngularJS 如何为 body 背景设置动画(CSS 或 JS)?

标签 javascript css angularjs animation gsap

我想在 View 更改时为背景图像设置动画。背景图像当前由 MainController 中定义的函数设置 - 看起来像这样:

// app/js/controllers.js

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

它只返回一个类名('pageBg' 在每个 Controller 中单独定义),它应该应用于正文:

// 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-enterng-leave 在您使用 ng-show 等指令时应用。在这种情况下,您只是应用一种样式,这样您就可以通过 body 的背景元素上的简单 CSS 转换来实现您想要做的事情:

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

我推荐this article以获得更完整的 Angular 动画概述。

关于javascript - AngularJS 如何为 body 背景设置动画(CSS 或 JS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222052/

相关文章:

c# - 剑道用户界面 : Selecting panelbar item by item property

javascript - 正则表达式匹配附加可选单词

javascript - DIV标签显示: inlineblock;

javascript - 停止滚动结束触发另一个滚动?

javascript - 在 AngularJS 中使用循环和 ng-class 创建包装 DIV

javascript - 动态颜色填充补间不起作用

javascript - 为什么对图像进行着色不起作用?

javascript - 动画一个绝对定位的 child 溢出的容器

javascript - Angular 2 过滤

javascript - 当宽度固定为样式时更改数组成员的宽度