ngAnimate, обратный вызов addClass не запускается после окончания анимации

Я не понимаю, почему обратный вызов вызывается сразу, без каких-либо задержек, я читал документ, в котором говорится, что он анализирует css для получения продолжительности перехода.

но это не работает, вот мой код:

это моя директива слайда:

'use strict'

class SlideController
  constructor: ($log, $scope) ->
    console.log 'controller init.'


class Slide
  constructor: ($log,$animate) ->
    link = (scope, element, attrs) =>
      scope.$watch 'slide.animation', (newValue,oldValue)->
        $animate.addClass element,'enter-right',()->
          console.log 'Animation ended!'



    return {
    link
    controller: ['$log', '$scope', SlideController]
    replace: true
    restrict: 'E'
    scope:
      slide: '='
    templateUrl: '/views/directives/postSlide.html'
    transclude: true
    }

angular.module('app').directive 'postSlide', ['$log','$animate', Slide]

и вот мой css:

.post-slide.enter-left, .post-slide.leave-left, .post-slide.enter-right, .post-slide.leave-right{
  position:absolute;
  left:0px;
  top:0px;
}

/**
  Enter/leave right
**/
.post-slide.enter-right {
  -webkit-animation:0.5s enter-right;
  animation:0.5s enter-right;
  z-index:100;
  background-color:darkgreen;

}

.post-slide.leave-right {
  -webkit-animation:0.5s leave-right;
  animation:0.5s leave-right;
  z-index:10;
  background-color:darkred;
}

@keyframes enter-right {
  from { left:100%; }
  to { left:0; }
}

@-webkit-keyframes enter-right {
  from { left:100%; }
  to { left:0; }
}

@keyframes leave-right {
  from { left:0; }
  to { left:-100%; }
}

@-webkit-keyframes leave-right {
  from { left:0; }
  to { left:-100%; }
}

person popo joe    schedule 29.11.2013    source источник


Ответы (1)


Я думаю, что вы неправильно используете обратный вызов, addClass возвращает обещание, а не входной параметр с функцией. У вас должно быть что-то вроде этого, в чистом js:

scope.$watch('slide.animation', function(newValue, oldValue) {
  return $animate.addClass(element, 'enter-right').then(function() {
    return console.log('Animation ended!');
  });
});

Совет: увеличьте продолжительность анимации до 10 секунд, откройте консоль, найдите анимированные элементы и посмотрите, как классы применяются во время анимации.

person Dmitry K    schedule 25.01.2017
comment
запоздалый ответ, но может быть кому-то будет полезно: D - person Dmitry K; 26.01.2017