我正在尝试在ng-view中的两个动画类之间切换。这就是我在html中设置ng-view的方法:
<div id="animation-container" class="view-animate-container">
<div id="ng-view" ng-view class="view-animate"></div>
</div>
这是我的第一个动画的css
.view-animate.ng-enter, .view-animate.ng-leave {
-webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.8s;
transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.8s;
display:block;
position:absolute;
top:0;
left:0;
}
.view-animate.ng-enter {
-webkit-transform: translate3d(100%, 0, 0);
}
.view-animate.ng-enter.ng-enter-active {
-webkit-transform: translate3d(0, 0, 0);
}
.view-animate.ng-leave.ng-leave-active {
-webkit-transform: translate3d(-100%, 0, 0);
}
第二部动画:
.view-leave.ng-enter, .view-leave.ng-leave {
-webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.8s;
-moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.8s;
-o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.8s;
transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.8s;
display:block;
position:absolute;
top:0;
left:0;
}
.view-leave.ng-enter {
opacity:0;
-webkit-transform: translate3d(-100%, 0, 0);
}
.view-leave.ng-enter.ng-enter-active {
opacity:1;
-webkit-transform: translate3d(0, 0, 0);
}
.view-leave.ng-leave.ng-leave-active {
opacity:0;
-webkit-transform: translate3d(100%, 0, 0);
}
我所要做的就是在单击后退按钮时将类从view-enter更改为view-leave。
<a id="back-btn" class="btn back" href="javascript:history.back()">BACK</a>
我写的这个Jquery代码几乎完成了工作,但不是100%:
$("#back-btn").click(function(){
$("#ng-view").attr('class','view-leave');
});
它似乎以正确的方向为离开容器设置动画,但不是输入容器。所以我正在寻找一个简单的解决方案,看似简单的问题。
答案 0 :(得分:2)
您甚至不需要jQuery
,您可以使用Angular的ng-class
属性。在后退按钮中添加ng-click
,后者会调用控制器内的功能。像这样:
在您的HTML中:
<div id="animation-container" class="view-animate-container">
<div id="ng-view" ng-view class="view-animate" ng-class="animationClass"></div>
</div>
<a class="btn back" href="javascript:history.back()" ng-click="toggleAnimation()">BACK</a>
在您的控制器中:
$scope.animationClass = "view-enter";
$scope.toggleAnimation = function() {
if ($scope.animationClass === "view-enter") {
$scope.animationClass = "view-leave";
} else if ($scope.animationClass === "view-leave") {
$scope.animationClass = "view-enter";
}
};
答案 1 :(得分:0)
我发现新的$routeChangeStart
事件采用了不同的方式。
此解决方案会保存历史记录,以检查下一页是否实际上是上一页。
将它放在你的控制器中:
$scope.backward = false;
$scope.history = [];
$scope.$on('$routeChangeStart', function(next, current) {
var previous = $scope.history[$scope.history.length - 2];
if (previous && current.originalPath === previous.originalPath) {
$scope.backward = true;
$scope.history.pop();
} else {
$scope.backward = false;
$scope.history.push(current);
}
});
然后使用ng-view
周围的容器,ng-class
对$scope.backward
作出反应。
<div ng-class="{'backward': backward}">
<ng-view class="view-animate">
</div>
有两个CSS动画。 .view-animate
上的转发或您用于ng-view
的任何课程。而.backward .view-animate
上的落后。
答案 2 :(得分:-2)
对于那些可能正在寻找这个问题的简单解决方案的人来说,扩展@muenchdo的答案。我设置了一个超时,以便在转换结束后恢复到上一个动画。
像这样:$scope.animationClass = "view-enter";
$scope.toggleAnimation = function() {
$scope.animationClass = "view-leave";
$timeout(function() {
$scope.animationClass = "view-enter";
}, 350);
}
这是我能找到的最简单的方法,希望这可以帮助那些寻找简单解决方案的人看起来像简单的功能。