我想将velocity.js与ng-animate结合使用,为我的应用创建自定义js动画。我在网上搜索过,发现了许多答案和教程,这些答案和教程都涉及ng-animate的旧版本,这显然已经随着时间的推移改变了API。 所以现在,这就是我的动画效果:
app.animation('.lb-fade', function () {
return {
addClass: function (element, className) {
element.velocity({
opacity: 1
},{
duration: 900,
easing: 'easeInSine'
});
}
};
});
我正在使用它:
$animate.addClass(backdrop, 'lb-fade').then(console.log('promise resolved'));
这种作品,但我有两个问题:
在速度旁边使用ng-animate甚至是有意义的还是我应该创建自己的函数来保存动画代码?
答案 0 :(得分:1)
也许这更像是一种解决方法,但我现在编写了自己的动画师服务,而不是现在使用ngAnimate
。它使用角度$q
来实现承诺。基本上,这就是ngAnimate如何做到这一点,但不知何故,我认为它并不知道速度何时完成动画。
这是我的服务:
.service('animator', function animator($q) {
this.flyOutRight = function($element) {
return $q(function(resolve) {
$element.velocity({
//css properties to get animated
}, {
duration: 200,
complete: function () {
$element.remove();
resolve();
}
});
});
};
//some more animations
});
用法:
animator.flyOutRight($oldImage).then(function(){
changeImageMutex = false;
});
答案 1 :(得分:0)
看起来你找到了解决问题的好方法!
我认为您的原始代码没有用,因为您没有使用内置的done
函数。它实际上是ngAnimate
在动画结束时返回的默认承诺的包装器。
您使用的函数包含第二个参数className
:function (element, className)
我使用了角度ngAnimate
,如下所示:
app.animation('.lb-fade', function () {
return {
addClass: function (element, doneFn) {
element.velocity({
opacity: 1
},{
duration: 900,
complete: doneFn
});
}
};
});
这对我很有用。
对于doneFn
,ngAnimate
似乎是still part of the api。
此外,如果你仍然想使用className
(即使看起来你没有使用它),你可以像这样使用它的功能:
function(element, className, doneFn) {}
希望这有帮助!