Пожалуйста, помогите мне с этой проблемой. У меня есть кнопка под названием "параметры", и если она нажата, я хочу добавить к ней класс ".green", чтобы запустить анимацию. Анимация делает фон кнопки зеленой и начинает исчезать до первоначального цвета. Однако, если анимация закончена, я хочу, чтобы класс был удален автоматически. Это необходимо, потому что, если вы добавите класс во второй раз, он больше не работает. Я предпочитаю НЕ использовать функцию тайм-аута. У меня возникли небольшие проблемы с тем, чтобы он не работал каждый раз.
Ниже я опубликовал ссылку на мой код.
@keyframes correct {
from { color:forestgreen; }
}
.green {
-webkit-animation: correct 0.4s ease-out;
-moz-animation: correct 0.4s ease-out;
}
Вы можете прослушивать событие animationend
элемента. Подробнее в этой статье.
В принципе, при условии, что button
- это ваш элемент кнопки:
var handler = function() {
button.removeEventListener("animationend", handler, false);
// (Remove the class here)
};
button.addEventListener("animationend", handler, false);
// (Add the class here)
(... или Угловой эквивалент addEventListener
.) Возможно, вам понадобятся префиксы поставщиков для этого имени события, подробности в статье.
Я подозреваю, что вы захотите удалить обработчик (показано выше), так как, конечно, удаление класса начнет новую анимацию.
Я посмотрел на ваши ответы, но также нашел более легкий ответ для решения проблемы. Я использовал одну строку jQuery для ее исправления:
$('#' + String(list.answers[list.x])).addClass('green').one('animationend', function(){$(this).removeClass('green')});
Я просто хотел, чтобы вы знали..
Благодарю!
Вы можете определить повторно используемый компонент, который уведомляет конец анимации о элементе следующим образом:
.directive("onAnimationEnd", ["$timeout", function($timeout){
return {
scope: {
onAnimationEnd: "&"
},
link: function(scope, element, attributes){
element.on("animationend", function(e){
$timeout(funciton(){
scope.onAnimationEnd({event: e});
});
});
}
};
}]);
В вашем HTML используйте директиву с самоопределением, а также директивы ng-class
и ng-click
:
<!-- the method 'removeGreenClass' will be called at the end of animation -->
<button ng-class="{green: started}" ng-click="animationStarted = true" on-animation-end="removeGreenClass(event)">
Затем определите метод removeGreenClass
, обновив контроллер следующим образом:
.controller("MainCtrl",function($scope){
console.log("Main Controller says: Hello World");
var home = this;
home.opties = false;
$scope.animationStarted = false; // initially false
$scope.removeGreenClass = function(event){
$scope.animationStarted = false;
};
});
$animate
api