$animate

The Famo.us/Angular implementation of the $animate service provides Famo.us animation support for Angular's core enter, leave, and move structural events.

With the attributes fa-animate-enter, fa-animate-leave, fa-animate-move, you can assign an arbitrary expression to animation events.

To notify Famo.us/Angular when your animations are complete, you must do one of two things: either pass a $done callback in your animation expressions, or design your animation expressions to evaluate as the numeric duration, in milliseconds, of the animation. If an animation expression both evaluates as a non-number and fails to invoke the $done callback, the animation event pipeline will not resolve correctly and items will fail to enter, leave, and move correctly.

To inform Famo.us/Angular how to halt any in-progress animation, use the fa-animate-halt attribute.

The core Angular animation API is fundamentally CSS class-based. Because only Famo.us Surfaces support CSS classes, core directives such as ngClass, ngShow, ngIf, and others should be applied only with directives representing Surfaces (such as faSurface and faImageSurface).

The ngAnimate module's documentation lists the set of core directives supporting $animate events. Please note that the ngAnimate module is not required (or recommended) to implement $animate events with Famo.us, but it is compatible and technically effective on Surfaces.

Usage

<ANY
  fa-animate-enter="expression"
  fa-animate-leave="expression"
  fa-animate-move="expression"
  fa-animate-halt="expression"
  ...
>
</ANY>

Example

<fa-modifier
  ng-repeat="item in items"
  fa-rotate-y="transitionable.get()"
  fa-animate-enter="enter()"
  fa-animate-leave="leave($done)"
  fa-animate-halt="halt()"
>
  ...
</fa-modifier>
var Transitionable = $famous['famous/transitions/Transitionable'];
var SnapTransition = $famous['famous/transitions/SnapTransition'];
var DURATION = 500;

$scope.transitionable = new Transitionable(Math.PI / 4);

// Fold items down to the right when they enter.
$scope.enter = function() {
  $scope.transitionable.set(
    0,
    {
      method: SnapTransition,
      duration: DURATION
    }
  );

 // Declare the animation duration by returning it as a number
 return DURATION;
};

// Fold items up to the left when they leave.
$scope.leave = function(done) {
  $scope.transitionable.set(
    Math.PI / 2,
    {
      method: SnapTransition,
      duration: DURATION
    },
    // Execute the done callback after the transition is fully applied
    done
  );
};

$scope.halt = function() {
  // Halt any active animations
  $scope.transitionable.halt();
};