我试图在自定义指令中使用$animate
服务。我遇到的问题是$animate
服务没有立即应用指定的类(可能是$apply
的时间问题),第一个动画也没有完成{ {1}}删除该课程。
我想:
$animate
始终启动动画mousedown
事件mousedown
之后立即结束。换句话说,我从不希望动画能够跳跃。我更喜欢使用mouseup
,但此时我还是愿意尝试其他解决方案...
请不要在解决方案中使用jQuery。
$animate

angular.module('app', [])
.directive('onActivate', function($parse, $q, $animate, $timeout) {
return {
restrict: 'A',
link: function(scope, element, attr) {
var hasTouch = false;
var handler = $parse(attr.onActivate);
element.one('mousedown', function() {
if (!hasTouch) {
console.log('Clicked!');
scope.$apply(function() {
$animate.addClass(element, 'pressed');
});
element.on('mousedown', function() {
scope.$apply(function() {
$animate.addClass(element, 'pressed');
});
});
element.on('mouseup', function() {
scope.$apply(function() {
$animate.removeClass(element, 'pressed');
});
});
element.on('click', function(event) {
scope.$evalAsync(handler(scope, {
$event: event
}));
});
}
});
element.one('touchstart', function(event) {
hasTouch = true;
$animate.addClass(element, 'pressed');
element.on('touchstart', function() {
$animate.addClass(element, 'pressed');
});
element.on('touchend touchcancel', function() {
$animate.removeClass(element, 'pressed');
});
element.on('touchend', function(event) {
scope.$evalAsync(handler(scope, {
$event: event
}));
});
});
}
}
})

/* Vendor prefixes are handled automatically
by prefixfree */
@keyframes grow {
from {
transform: scale(1);
}
to {
transform: scale(0.75);
}
}
button {
width: 5rem;
height: 2rem;
transition: all 1s ease;
}
button.pressed {
transition: none;
animation: grow 1s ease;
transform: scale(0.75);
}
button:not(.pressed) {
transform: scale(1);
}