Angular.js 页面转换 & $animate.addClass
Angular.js page transition & $animate.addClass
我想在我的路线更改时向我的包装器添加一个特定的 class,这样我就可以控制将触发什么 CSS 动画。
我试着这样做:
http://plnkr.co/edit/KRwBFb6bCTkit9eKg8yb?p=preview
$rootScope.$on( "$routeChangeSuccess", function(event, next, current) {
//Code to skip animation on the first load/page
if( 'undefined' === typeof current || $scope.pageClass == '' ) return false;
var elem = document.querySelector("#wrapper");
var viewElem = angular.element(elem);
$animate.addClass(viewElem, $scope.pageClass).then(function(){
$animate.removeClass(viewElem, $scope.pageClass);
});
});
但是没有添加class,我是不是用错了这个功能?
您的代码所做的是将正确的 CSS class 添加到 #wrapper
元素,然后在添加后立即将其删除。 addClass
函数返回的承诺(您用来删除 class)在添加 class 时解决,而不是在 class 定义的动画是完全的。
如果您想要做的是在动画完成后从 #wrapper
中删除 CSS class,以便您可以为下一个需要的动画重置它而是将您的代码绑定到 enter
事件。类似于以下内容:
$animate.on('enter', angular.element(document.querySelector("#wrapper")),
function callback(element, phase) {
if (phase === 'close') {
$animate.removeClass(angular.element(document.querySelector("#wrapper")), 'RL');
$animate.removeClass(angular.element(document.querySelector("#wrapper")), 'LR');
}
}
);
我想在我的路线更改时向我的包装器添加一个特定的 class,这样我就可以控制将触发什么 CSS 动画。
我试着这样做: http://plnkr.co/edit/KRwBFb6bCTkit9eKg8yb?p=preview
$rootScope.$on( "$routeChangeSuccess", function(event, next, current) {
//Code to skip animation on the first load/page
if( 'undefined' === typeof current || $scope.pageClass == '' ) return false;
var elem = document.querySelector("#wrapper");
var viewElem = angular.element(elem);
$animate.addClass(viewElem, $scope.pageClass).then(function(){
$animate.removeClass(viewElem, $scope.pageClass);
});
});
但是没有添加class,我是不是用错了这个功能?
您的代码所做的是将正确的 CSS class 添加到 #wrapper
元素,然后在添加后立即将其删除。 addClass
函数返回的承诺(您用来删除 class)在添加 class 时解决,而不是在 class 定义的动画是完全的。
如果您想要做的是在动画完成后从 #wrapper
中删除 CSS class,以便您可以为下一个需要的动画重置它而是将您的代码绑定到 enter
事件。类似于以下内容:
$animate.on('enter', angular.element(document.querySelector("#wrapper")),
function callback(element, phase) {
if (phase === 'close') {
$animate.removeClass(angular.element(document.querySelector("#wrapper")), 'RL');
$animate.removeClass(angular.element(document.querySelector("#wrapper")), 'LR');
}
}
);