docs(animations): add documentation for new animation features
This commit is contained in:
parent
5d4f5434fd
commit
b10029c18b
|
@ -9,15 +9,54 @@ import {AnimationMetadata, AnimationOptions} from './animation_metadata';
|
||||||
import {AnimationPlayer} from './players/animation_player';
|
import {AnimationPlayer} from './players/animation_player';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* AnimationBuilder is an injectable service that is available when the {@link
|
||||||
|
* BrowserAnimationsModule BrowserAnimationsModule} or {@link NoopAnimationsModule
|
||||||
|
* NoopAnimationsModule} modules are used within an application.
|
||||||
|
*
|
||||||
|
* The purpose if this service is to produce an animation sequence programmatically within an
|
||||||
|
* angular component or directive.
|
||||||
|
*
|
||||||
|
* Programmatic animations are first built and then a player is created when the build animation is
|
||||||
|
* attached to an element.
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* // remember to include the BrowserAnimationsModule module for this to work...
|
||||||
|
* import {AnimationBuilder} from '@angular/animations';
|
||||||
|
*
|
||||||
|
* class MyCmp {
|
||||||
|
* constructor(private _builder: AnimationBuilder) {}
|
||||||
|
*
|
||||||
|
* makeAnimation(element: any) {
|
||||||
|
* // first build the animation
|
||||||
|
* const myAnimation = this._builder.build([
|
||||||
|
* style({ width: 0 }),
|
||||||
|
* animate(1000, style({ width: '100px' }))
|
||||||
|
* ]);
|
||||||
|
*
|
||||||
|
* // then create a player from it
|
||||||
|
* const player = myAnimation.create(element);
|
||||||
|
*
|
||||||
|
* player.play();
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* When an animation is built an instance of {@link AnimationFactory AnimationFactory} will be
|
||||||
|
* returned. Using that an {@link AnimationPlayer AnimationPlayer} can be created which can then be
|
||||||
|
* used to start the animation.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export abstract class AnimationBuilder {
|
export abstract class AnimationBuilder {
|
||||||
abstract build(animation: AnimationMetadata|AnimationMetadata[]): Animation;
|
abstract build(animation: AnimationMetadata|AnimationMetadata[]): AnimationFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* An instance of `AnimationFactory` is returned from {@link AnimationBuilder#build
|
||||||
|
* AnimationBuilder.build}.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export abstract class Animation {
|
export abstract class AnimationFactory {
|
||||||
abstract create(element: any, options?: AnimationOptions): AnimationPlayer;
|
abstract create(element: any, options?: AnimationOptions): AnimationPlayer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
export interface ɵStyleData { [key: string]: string|number; }
|
export interface ɵStyleData { [key: string]: string|number; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Metadata representing the entry of animations. Instances of this interface are created internally
|
||||||
|
* within the Angular animation DSL.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export declare type AnimateTimings = {
|
export declare type AnimateTimings = {
|
||||||
|
@ -17,6 +20,23 @@ export declare type AnimateTimings = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* `AnimationOptions` represents options that can be passed into most animation DSL methods.
|
||||||
|
* When options are provided, the delay value of an animation can be changed and animation input
|
||||||
|
* parameters can be passed in to change styling and timing data when an animation is started.
|
||||||
|
*
|
||||||
|
* The following animation DSL functions are able to accept animation option data:
|
||||||
|
*
|
||||||
|
* - {@link transition transition()}
|
||||||
|
* - {@link sequence sequence()}
|
||||||
|
* - {@link group group()}
|
||||||
|
* - {@link query query()}
|
||||||
|
* - {@link animation animation()}
|
||||||
|
* - {@link useAnimation useAnimation()}
|
||||||
|
* - {@link animateChild animateChild()}
|
||||||
|
*
|
||||||
|
* Programmatic animations built using {@link AnimationBuilder the AnimationBuilder service} also
|
||||||
|
* make use of AnimationOptions.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export declare interface AnimationOptions {
|
export declare interface AnimationOptions {
|
||||||
|
@ -25,11 +45,17 @@ export declare interface AnimationOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Metadata representing the entry of animations. Instances of this interface are created internally
|
||||||
|
* within the Angular animation DSL when {@link animateChild animateChild()} is used.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export declare interface AnimateChildOptions extends AnimationOptions { duration?: number|string; }
|
export declare interface AnimateChildOptions extends AnimationOptions { duration?: number|string; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Metadata representing the entry of animations. Usages of this enum are created
|
||||||
|
* each time an animation DSL function is used.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export const enum AnimationMetadataType {
|
export const enum AnimationMetadataType {
|
||||||
|
@ -59,6 +85,9 @@ export const AUTO_STYLE = '*';
|
||||||
export interface AnimationMetadata { type: AnimationMetadataType; }
|
export interface AnimationMetadata { type: AnimationMetadataType; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
|
* animation DSL when the {@link trigger trigger animation function} is called.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export interface AnimationTriggerMetadata extends AnimationMetadata {
|
export interface AnimationTriggerMetadata extends AnimationMetadata {
|
||||||
|
@ -68,7 +97,7 @@ export interface AnimationTriggerMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata representing the entry of animations. Instances of this class are provided via the
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
* animation DSL when the {@link state state animation function} is called.
|
* animation DSL when the {@link state state animation function} is called.
|
||||||
*
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
|
@ -79,7 +108,7 @@ export interface AnimationStateMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata representing the entry of animations. Instances of this class are provided via the
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
* animation DSL when the {@link transition transition animation function} is called.
|
* animation DSL when the {@link transition transition animation function} is called.
|
||||||
*
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
|
@ -108,7 +137,7 @@ export interface AnimationQueryMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata representing the entry of animations. Instances of this class are provided via the
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
* animation DSL when the {@link keyframes keyframes animation function} is called.
|
* animation DSL when the {@link keyframes keyframes animation function} is called.
|
||||||
*
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
|
@ -118,7 +147,7 @@ export interface AnimationKeyframesSequenceMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata representing the entry of animations. Instances of this class are provided via the
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
* animation DSL when the {@link style style animation function} is called.
|
* animation DSL when the {@link style style animation function} is called.
|
||||||
*
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
|
@ -129,7 +158,7 @@ export interface AnimationStyleMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata representing the entry of animations. Instances of this class are provided via the
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
* animation DSL when the {@link animate animate animation function} is called.
|
* animation DSL when the {@link animate animate animation function} is called.
|
||||||
*
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
|
@ -140,6 +169,9 @@ export interface AnimationAnimateMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
|
* animation DSL when the {@link animateChild animateChild animation function} is called.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export interface AnimationAnimateChildMetadata extends AnimationMetadata {
|
export interface AnimationAnimateChildMetadata extends AnimationMetadata {
|
||||||
|
@ -147,6 +179,9 @@ export interface AnimationAnimateChildMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
|
* animation DSL when the {@link useAnimation useAnimation animation function} is called.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export interface AnimationAnimateRefMetadata extends AnimationMetadata {
|
export interface AnimationAnimateRefMetadata extends AnimationMetadata {
|
||||||
|
@ -155,7 +190,7 @@ export interface AnimationAnimateRefMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata representing the entry of animations. Instances of this class are provided via the
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
* animation DSL when the {@link sequence sequence animation function} is called.
|
* animation DSL when the {@link sequence sequence animation function} is called.
|
||||||
*
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
|
@ -166,7 +201,7 @@ export interface AnimationSequenceMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Metadata representing the entry of animations. Instances of this class are provided via the
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
* animation DSL when the {@link group group animation function} is called.
|
* animation DSL when the {@link group group animation function} is called.
|
||||||
*
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
|
@ -177,6 +212,20 @@ export interface AnimationGroupMetadata extends AnimationMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
|
* animation DSL when the {@link query query animation function} is called.
|
||||||
|
*
|
||||||
|
* @experimental Animation support is experimental.
|
||||||
|
*/
|
||||||
|
export declare interface AnimationQueryOptions extends AnimationOptions {
|
||||||
|
optional?: boolean;
|
||||||
|
limit?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metadata representing the entry of animations. Instances of this interface are provided via the
|
||||||
|
* animation DSL when the {@link stagger stagger animation function} is called.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export interface AnimationStaggerMetadata extends AnimationMetadata {
|
export interface AnimationStaggerMetadata extends AnimationMetadata {
|
||||||
|
@ -628,6 +677,38 @@ export function transition(
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* `animation` is an animation-specific function that is designed to be used inside of Angular's
|
||||||
|
* animation DSL language.
|
||||||
|
*
|
||||||
|
* `var myAnimation = animation(...)` is designed to produce a reusable animation that can be later
|
||||||
|
* invoked in another animation or sequence. Reusable animations are designed to make use of
|
||||||
|
* animation parameters and the produced animation can be used via the `useAnimation` method.
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* var fadeAnimation = animation([
|
||||||
|
* style({ opacity: '{{ start }}' }),
|
||||||
|
* animate('{{ time }}',
|
||||||
|
* style({ opacity: '{{ end }}'))
|
||||||
|
* ], { params: { time: '1000ms', start: 0, end: 1 }});
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If parameters are attached to an animation then they act as **default parameter values**. When an
|
||||||
|
* animation is invoked via `useAnimation` then parameter values are allowed to be passed in
|
||||||
|
* directly. If any of the passed in parameter values are missing then the default values will be
|
||||||
|
* used.
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* useAnimation(fadeAnimation, {
|
||||||
|
* params: {
|
||||||
|
* time: '2s',
|
||||||
|
* start: 1,
|
||||||
|
* end: 0
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* If one or more parameter values are missing before animated then an error will be thrown.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export function animation(
|
export function animation(
|
||||||
|
@ -637,6 +718,100 @@ export function animation(
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* `animateChild` is an animation-specific function that is designed to be used inside of Angular's
|
||||||
|
* animation DSL language. It works by allowing a queried element to execute its own
|
||||||
|
* animation within the animation sequence.
|
||||||
|
*
|
||||||
|
* Each time an animation is triggered in angular, the parent animation
|
||||||
|
* will always get priority and any child animations will be blocked. In order
|
||||||
|
* for a child animation to run, the parent animation must query each of the elements
|
||||||
|
* containing child animations and then allow the animations to run using `animateChild`.
|
||||||
|
*
|
||||||
|
* The example HTML code below shows both parent and child elements that have animation
|
||||||
|
* triggers that will execute at the same time.
|
||||||
|
*
|
||||||
|
* ```html
|
||||||
|
* <!-- parent-child.component.html -->
|
||||||
|
* <button (click)="exp =! exp">Toggle</button>
|
||||||
|
* <hr>
|
||||||
|
*
|
||||||
|
* <div [@parentAnimation]="exp">
|
||||||
|
* <header>Hello</header>
|
||||||
|
* <div [@childAnimation]="exp">
|
||||||
|
* one
|
||||||
|
* </div>
|
||||||
|
* <div [@childAnimation]="exp">
|
||||||
|
* two
|
||||||
|
* </div>
|
||||||
|
* <div [@childAnimation]="exp">
|
||||||
|
* three
|
||||||
|
* </div>
|
||||||
|
* </div>
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Now when the `exp` value changes to true, only the `parentAnimation` animation will animate
|
||||||
|
* because it has priority. However, using `query` and `animateChild` each of the inner animations
|
||||||
|
* can also fire:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* // parent-child.component.ts
|
||||||
|
* import {trigger, transition, animate, style, query, animateChild} from '@angular/animations';
|
||||||
|
* @Component({
|
||||||
|
* selector: 'parent-child-component',
|
||||||
|
* animations: [
|
||||||
|
* trigger('parentAnimation', [
|
||||||
|
* transition('false => true', [
|
||||||
|
* query('header', [
|
||||||
|
* style({ opacity: 0 }),
|
||||||
|
* animate(500, style({ opacity: 1 }))
|
||||||
|
* ]),
|
||||||
|
* query('@childAnimation', [
|
||||||
|
* animateChild()
|
||||||
|
* ])
|
||||||
|
* ])
|
||||||
|
* ]),
|
||||||
|
* trigger('childAnimation', [
|
||||||
|
* transition('false => true', [
|
||||||
|
* style({ opacity: 0 }),
|
||||||
|
* animate(500, style({ opacity: 1 }))
|
||||||
|
* ])
|
||||||
|
* ])
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
|
* class ParentChildCmp {
|
||||||
|
* exp: boolean = false;
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* In the animation code above, when the `parentAnimation` transition kicks off it first queries to
|
||||||
|
* find the header element and fades it in. It then finds each of the sub elements that contain the
|
||||||
|
* `@childAnimation` trigger and then allows for their animations to fire.
|
||||||
|
*
|
||||||
|
* This example can be further extended by using stagger:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* query('@childAnimation', stagger(100, [
|
||||||
|
* animateChild()
|
||||||
|
* ]))
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Now each of the sub animations start off with respect to the `100ms` staggering step.
|
||||||
|
*
|
||||||
|
* ## The first frame of child animations
|
||||||
|
* When sub animations are executed using `animateChild` the animation engine will always apply the
|
||||||
|
* first frame of every sub animation immediately at the start of the animation sequence. This way
|
||||||
|
* the parent animation does not need to set any initial styling data on the sub elements before the
|
||||||
|
* sub animations kick off.
|
||||||
|
*
|
||||||
|
* In the example above the first frame of the `childAnimation`'s `false => true` transition
|
||||||
|
* consists of a style of `opacity: 0`. This is applied immediately when the `parentAnimation`
|
||||||
|
* animation transition sequence starts. Only then when the `@childAnimation` is queried and called
|
||||||
|
* with `animateChild` will it then animate to its destination of `opacity: 1`.
|
||||||
|
*
|
||||||
|
* Note that this feature designed to be used alongside {@link query query()} and it will only work
|
||||||
|
* with animations that are assigned using the Angular animation DSL (this means that CSS keyframes
|
||||||
|
* and transitions are not handled by this API).
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export function animateChild(options: AnimateChildOptions | null = null):
|
export function animateChild(options: AnimateChildOptions | null = null):
|
||||||
|
@ -645,6 +820,10 @@ export function animateChild(options: AnimateChildOptions | null = null):
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* `useAnimation` is an animation-specific function that is designed to be used inside of Angular's
|
||||||
|
* animation DSL language. It is used to kick off a reusable animation that is created using {@link
|
||||||
|
* animation animation()}.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export function useAnimation(
|
export function useAnimation(
|
||||||
|
@ -654,14 +833,95 @@ export function useAnimation(
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @experimental Animation support is experimental.
|
* `query` is an animation-specific function that is designed to be used inside of Angular's
|
||||||
*/
|
* animation DSL language.
|
||||||
export declare interface AnimationQueryOptions extends AnimationOptions {
|
*
|
||||||
optional?: boolean;
|
* query() is used to find one or more inner elements within the current element that is
|
||||||
limit?: number;
|
* being animated within the sequence. The provided animation steps are applied
|
||||||
}
|
* to the queried element (by default, an array is provided, then this will be
|
||||||
|
* treated as an animation sequence).
|
||||||
/**
|
*
|
||||||
|
* ### Usage
|
||||||
|
*
|
||||||
|
* query() is designed to collect mutiple elements and works internally by using
|
||||||
|
* `element.querySelectorAll`. An additional options object can be provided which
|
||||||
|
* can be used to limit the total amount of items to be collected.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* query('div', [
|
||||||
|
* animate(...),
|
||||||
|
* animate(...)
|
||||||
|
* ], { limit: 1 })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* query(), by default, will throw an error when zero items are found. If a query
|
||||||
|
* has the `optional` flag set to true then this error will be ignored.
|
||||||
|
*
|
||||||
|
* ```js
|
||||||
|
* query('.some-element-that-may-not-be-there', [
|
||||||
|
* animate(...),
|
||||||
|
* animate(...)
|
||||||
|
* ], { optional: true })
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* ### Special Selector Values
|
||||||
|
*
|
||||||
|
* The selector value within a query can collect elements that contain angular-specific
|
||||||
|
* characteristics
|
||||||
|
* using special pseudo-selectors tokens.
|
||||||
|
*
|
||||||
|
* These include:
|
||||||
|
*
|
||||||
|
* - Querying for newly inserted/removed elements using `query(":enter")`/`query(":leave")`
|
||||||
|
* - Querying all currently animating elements using `query(":animating")`
|
||||||
|
* - Querying elements that contain an animation trigger using `query("@triggerName")`
|
||||||
|
* - Querying all elements that contain an animation triggers using `query("@*")`
|
||||||
|
* - Including the current element into the animation sequence using `query(":self")`
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Each of these pseudo-selector tokens can be merged together into a combined query selector
|
||||||
|
* string:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* query(':self, .record:enter, .record:leave, @subTrigger', [...])
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* ### Demo
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* @Component({
|
||||||
|
* selector: 'inner',
|
||||||
|
* template: `
|
||||||
|
* <div [@queryAnimation]="exp">
|
||||||
|
* <h1>Title</h1>
|
||||||
|
* <div class="content">
|
||||||
|
* Blah blah blah
|
||||||
|
* </div>
|
||||||
|
* </div>
|
||||||
|
* `,
|
||||||
|
* animations: [
|
||||||
|
* trigger('queryAnimation', [
|
||||||
|
* transition('* => goAnimate', [
|
||||||
|
* // hide the inner elements
|
||||||
|
* query('h1', style({ opacity: 0 })),
|
||||||
|
* query('.content', style({ opacity: 0 })),
|
||||||
|
*
|
||||||
|
* // animate the inner elements in, one by one
|
||||||
|
* query('h1', animate(1000, style({ opacity: 1 })),
|
||||||
|
* query('.content', animate(1000, style({ opacity: 1 })),
|
||||||
|
* ])
|
||||||
|
* ])
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
|
* class Cmp {
|
||||||
|
* exp = '';
|
||||||
|
*
|
||||||
|
* goAnimate() {
|
||||||
|
* this.exp = 'goAnimate';
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export function query(
|
export function query(
|
||||||
|
@ -671,6 +931,81 @@ export function query(
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* `stagger` is an animation-specific function that is designed to be used inside of Angular's
|
||||||
|
* animation DSL language. It is designed to be used inside of an animation {@link query query()}
|
||||||
|
* and works by issuing a timing gap between after each queried item is animated.
|
||||||
|
*
|
||||||
|
* ### Usage
|
||||||
|
*
|
||||||
|
* In the example below there is a container element that wraps a list of items stamped out
|
||||||
|
* by an ngFor. The container element contains an animation trigger that will later be set
|
||||||
|
* to query for each of the inner items.
|
||||||
|
*
|
||||||
|
* ```html
|
||||||
|
* <!-- list.component.html -->
|
||||||
|
* <button (click)="toggle()">Show / Hide Items</button>
|
||||||
|
* <hr />
|
||||||
|
* <div [@listAnimation]="items.length">
|
||||||
|
* <div *ngFor="let item of items">
|
||||||
|
* {{ item }}
|
||||||
|
* </div>
|
||||||
|
* </div>
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* The component code for this looks as such:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* import {trigger, transition, style, animate, query, stagger} from '@angular/animations';
|
||||||
|
* @Component({
|
||||||
|
* templateUrl: 'list.component.html',
|
||||||
|
* animations: [
|
||||||
|
* trigger('listAnimation', [
|
||||||
|
* //...
|
||||||
|
* ])
|
||||||
|
* ]
|
||||||
|
* })
|
||||||
|
* class ListComponent {
|
||||||
|
* items = [];
|
||||||
|
*
|
||||||
|
* showItems() {
|
||||||
|
* this.items = [0,1,2,3,4];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* hideItems() {
|
||||||
|
* this.items = [];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* toggle() {
|
||||||
|
* this.items.length ? this.hideItems() : this.showItems();
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* And now for the animation trigger code:
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* trigger('listAnimation', [
|
||||||
|
* transition('* => *', [ // each time the binding value changes
|
||||||
|
* query(':leave', [
|
||||||
|
* stagger(100, [
|
||||||
|
* animate('0.5s', style({ opacity: 0 }))
|
||||||
|
* ])
|
||||||
|
* ]),
|
||||||
|
* query(':enter', [
|
||||||
|
* style({ opacity: 0 }),
|
||||||
|
* stagger(100, [
|
||||||
|
* animate('0.5s', style({ opacity: 1 }))
|
||||||
|
* ])
|
||||||
|
* ])
|
||||||
|
* ])
|
||||||
|
* ])
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Now each time the items are added/removed then either the opacity
|
||||||
|
* fade-in animation will run or each removed item will be faded out.
|
||||||
|
* When either of these animations occur then a stagger effect will be
|
||||||
|
* applied after each item's animation is started.
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export function stagger(
|
export function stagger(
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
* @description
|
* @description
|
||||||
* Entry point for all animation APIs of the animation package.
|
* Entry point for all animation APIs of the animation package.
|
||||||
*/
|
*/
|
||||||
export {Animation, AnimationBuilder} from './animation_builder';
|
export {AnimationBuilder, AnimationFactory} from './animation_builder';
|
||||||
export {AnimationEvent} from './animation_event';
|
export {AnimationEvent} from './animation_event';
|
||||||
export {AUTO_STYLE, AnimateChildOptions, AnimateTimings, AnimationAnimateChildMetadata, AnimationAnimateMetadata, AnimationAnimateRefMetadata, AnimationGroupMetadata, AnimationKeyframesSequenceMetadata, AnimationMetadata, AnimationMetadataType, AnimationOptions, AnimationQueryMetadata, AnimationQueryOptions, AnimationReferenceMetadata, AnimationSequenceMetadata, AnimationStaggerMetadata, AnimationStateMetadata, AnimationStyleMetadata, AnimationTransitionMetadata, AnimationTriggerMetadata, animate, animateChild, animation, group, keyframes, query, sequence, stagger, state, style, transition, trigger, useAnimation, ɵStyleData} from './animation_metadata';
|
export {AUTO_STYLE, AnimateChildOptions, AnimateTimings, AnimationAnimateChildMetadata, AnimationAnimateMetadata, AnimationAnimateRefMetadata, AnimationGroupMetadata, AnimationKeyframesSequenceMetadata, AnimationMetadata, AnimationMetadataType, AnimationOptions, AnimationQueryMetadata, AnimationQueryOptions, AnimationReferenceMetadata, AnimationSequenceMetadata, AnimationStaggerMetadata, AnimationStateMetadata, AnimationStyleMetadata, AnimationTransitionMetadata, AnimationTriggerMetadata, animate, animateChild, animation, group, keyframes, query, sequence, stagger, state, style, transition, trigger, useAnimation, ɵStyleData} from './animation_metadata';
|
||||||
export {AnimationPlayer, NoopAnimationPlayer} from './players/animation_player';
|
export {AnimationPlayer, NoopAnimationPlayer} from './players/animation_player';
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
import {scheduleMicroTask} from '../util';
|
import {scheduleMicroTask} from '../util';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* AnimationPlayer controls an animation sequence that was produced from a programmatic animation.
|
||||||
|
* (see {@link AnimationBuilder AnimationBuilder} for more information on how to create programmatic
|
||||||
|
* animations.)
|
||||||
|
*
|
||||||
* @experimental Animation support is experimental.
|
* @experimental Animation support is experimental.
|
||||||
*/
|
*/
|
||||||
export interface AnimationPlayer {
|
export interface AnimationPlayer {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* Use of this source code is governed by an MIT-style license that can be
|
* Use of this source code is governed by an MIT-style license that can be
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
import {Animation, AnimationBuilder, AnimationMetadata, AnimationOptions, AnimationPlayer, NoopAnimationPlayer, sequence} from '@angular/animations';
|
import {AnimationBuilder, AnimationFactory, AnimationMetadata, AnimationOptions, AnimationPlayer, NoopAnimationPlayer, sequence} from '@angular/animations';
|
||||||
import {Injectable, RendererFactory2, RendererType2, ViewEncapsulation} from '@angular/core';
|
import {Injectable, RendererFactory2, RendererType2, ViewEncapsulation} from '@angular/core';
|
||||||
|
|
||||||
import {AnimationRenderer} from './animation_renderer';
|
import {AnimationRenderer} from './animation_renderer';
|
||||||
|
@ -26,16 +26,16 @@ export class BrowserAnimationBuilder extends AnimationBuilder {
|
||||||
this._renderer = rootRenderer.createRenderer(document.body, typeData) as AnimationRenderer;
|
this._renderer = rootRenderer.createRenderer(document.body, typeData) as AnimationRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
build(animation: AnimationMetadata|AnimationMetadata[]): Animation {
|
build(animation: AnimationMetadata|AnimationMetadata[]): AnimationFactory {
|
||||||
const id = this._nextAnimationId.toString();
|
const id = this._nextAnimationId.toString();
|
||||||
this._nextAnimationId++;
|
this._nextAnimationId++;
|
||||||
const entry = Array.isArray(animation) ? sequence(animation) : animation;
|
const entry = Array.isArray(animation) ? sequence(animation) : animation;
|
||||||
issueAnimationCommand(this._renderer, null, id, 'register', [entry]);
|
issueAnimationCommand(this._renderer, null, id, 'register', [entry]);
|
||||||
return new BrowserAnimation(id, this._renderer);
|
return new BrowserAnimationFactory(id, this._renderer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class BrowserAnimation extends Animation {
|
export class BrowserAnimationFactory extends AnimationFactory {
|
||||||
constructor(private _id: string, private _renderer: AnimationRenderer) { super(); }
|
constructor(private _id: string, private _renderer: AnimationRenderer) { super(); }
|
||||||
|
|
||||||
create(element: any, options?: AnimationOptions): AnimationPlayer {
|
create(element: any, options?: AnimationOptions): AnimationPlayer {
|
||||||
|
|
|
@ -5,5 +5,5 @@
|
||||||
* Use of this source code is governed by an MIT-style license that can be
|
* Use of this source code is governed by an MIT-style license that can be
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
export {BrowserAnimation as ɵBrowserAnimation, BrowserAnimationBuilder as ɵBrowserAnimationBuilder} from './animation_builder';
|
export {BrowserAnimationBuilder as ɵBrowserAnimationBuilder, BrowserAnimationFactory as ɵBrowserAnimationFactory} from './animation_builder';
|
||||||
export {AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory} from './animation_renderer';
|
export {AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory} from './animation_renderer';
|
||||||
|
|
|
@ -19,11 +19,6 @@ export declare type AnimateTimings = {
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export declare function animation(steps: AnimationMetadata | AnimationMetadata[], options?: AnimationOptions | null): AnimationReferenceMetadata;
|
export declare function animation(steps: AnimationMetadata | AnimationMetadata[], options?: AnimationOptions | null): AnimationReferenceMetadata;
|
||||||
|
|
||||||
/** @experimental */
|
|
||||||
export declare abstract class Animation {
|
|
||||||
abstract create(element: any, options?: AnimationOptions): AnimationPlayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export interface AnimationAnimateChildMetadata extends AnimationMetadata {
|
export interface AnimationAnimateChildMetadata extends AnimationMetadata {
|
||||||
options: AnimationOptions | null;
|
options: AnimationOptions | null;
|
||||||
|
@ -43,7 +38,7 @@ export interface AnimationAnimateRefMetadata extends AnimationMetadata {
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export declare abstract class AnimationBuilder {
|
export declare abstract class AnimationBuilder {
|
||||||
abstract build(animation: AnimationMetadata | AnimationMetadata[]): Animation;
|
abstract build(animation: AnimationMetadata | AnimationMetadata[]): AnimationFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
|
@ -56,6 +51,11 @@ export interface AnimationEvent {
|
||||||
triggerName: string;
|
triggerName: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @experimental */
|
||||||
|
export declare abstract class AnimationFactory {
|
||||||
|
abstract create(element: any, options?: AnimationOptions): AnimationPlayer;
|
||||||
|
}
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
export interface AnimationGroupMetadata extends AnimationMetadata {
|
export interface AnimationGroupMetadata extends AnimationMetadata {
|
||||||
options: AnimationOptions | null;
|
options: AnimationOptions | null;
|
||||||
|
|
Loading…
Reference in New Issue