【发布时间】:2014-08-09 19:08:34
【问题描述】:
我想在视图更改时为背景图像设置动画。背景图像当前由 MainController 中定义的函数设置 - 它看起来像这样:
// app/js/controllers.js
$scope.getBg = function() {
return $route.current.scope.pageBg || 'bg-intro';
};
它只返回一个类名('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();
}
};
}
}})
我认为这将是一项简单的任务,不幸的是,这对我来说似乎很难。
【问题讨论】:
-
我认为
// app/css/animations.css并不完全在您的 CSS 中。因为它不是行注释,而是下一个构造注释(注释为/* */)。//会注释掉你的.bg-intro.ng-enter part。 -
如果每个控制器中定义的
pageBg值不是bg-intro并且您的样式表中只有bg-intro,我相信您的动画将无法正常工作。 -
@PhilippeBlayo:它不在 animate.css 中 - 我在这里手动添加了它。感谢您指出这一点 - 这可能会造成混淆。
-
@ArnelleBalane:是的,我在这里只放了一部分 CSS 代码 - 我为每个视图类定义了这些动画(在原始文件中)。
-
我用过 Greensock ,我更喜欢用 CSS ,因为它更流畅
标签: javascript css angularjs animation gsap