Spec-Zone.ru › Angular 2

Переход

Experimental Function

Класс Экспорт

export transition(stateChangeExpr: string, steps: AnimationMetadata | AnimationMetadata[]) : AnimationStateTransitionMetadata

transition — это функция, специфичная для анимаций, предназначенная для использования в языке анимаций Angular2. Если эта информация для вас нова, пожалуйста, перейдите на страницу метаданных анимаций компонентов, чтобы лучше понять, как используются анимации в Angular2.

transition объявляет последовательность шагов анимации, которые будут выполнены, когда заданное значение stateChangeExpr будет удовлетворено. stateChangeExpr состоит из state1 => state2, который состоит из двух известных состояний (используйте звездочку (*) для указания динамического начального и/или конечного состояния).

Переходы анимаций размещаются внутри триггера анимации. Для того, чтобы анимация перешла в значение состояния и сохранила свои стили, необходимо определить один или несколько состояний анимации.

Использование

Переход анимации инициируется, когда предикат stateChangeExpr принимает значение true, основываясь на предыдущем и текущем состоянии. Другими словами, если определён переход, соответствующий критериям старого/текущего состояния, то будет запущен связанная анимация.

// all transition/state changes are defined within an animation trigger
trigger("myAnimationTrigger", [
  // if a state is defined then its styles will be persisted when the
  // animation has fully completed itself
  state("on", style({ background: "green" })),
  state("off", style({ background: "grey" })),

  // a transition animation that will be kicked off when the state value
  // bound to "myAnimationTrigger" changes from "on" to "off"
  transition("on => off", animate(500)),

  // it is also possible to do run the same animation for both directions
  transition("on <=> off", animate(500)),

  // or to define multiple states pairs separated by commas
  transition("on => off, off => void", animate(500)),

  // this is a catch-all state change for when an element is inserted into
  // the page and the destination state is unknown
  transition("void => *", [
    style({ opacity: 0 }),
    animate(500)
  ]),

  // this will capture a state change between any states
  transition("* => *", animate("1s 0s")),
])

Шаблон, связанный с этим компонентом, будет использовать триггер анимации myAnimationTrigger, привязываясь к элементу в его коде шаблона.

<!-- somewhere inside of my-component-tpl.html -->
<div [@myAnimationTrigger]="myStatusExp">...</div>

Окончательный вызов animate

Если последний шаг в шагах перехода — это вызов animate(), который только использует значение времени без данных стиля, то он автоматически будет использован как конечная дуга анимации для перемещения элемента в конечное состояние. Это включает автоматическую добавление/удаление CSS-стилей, чтобы элемент находился в точном состоянии, необходимом для правильной презентации применённого состояния.

// start off by hiding the element, but make sure that it animates properly to whatever state
// is currently active for "myAnimationTrigger"
transition("void => *", [
  style({ opacity: 0 }),
  animate(500)
])

Псевдонимы перехода (:enter и :leave)

Учитывая, что анимации вставки (вход) и удаления (выход) настолько распространены, функция transition принимает значения :enter и :leave, которые являются псевдонимами для изменений состояния void => * и * => void.

transition(":enter", [
  style({ opacity: 0 }),
  animate(500, style({ opacity: 1 }))
])
transition(":leave", [
  animate(500, style({ opacity: 0 }))
])

Пример (живая демонстрация)

import {Component, NgModule, animate, state, style, transition, trigger} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';

@Component({
  selector: 'example-app',
  styles: [`
    .toggle-container {
      background-color:white;
      border:10px solid black;
      width:200px;
      text-align:center;
      line-height:100px;
      font-size:50px;
      box-sizing:border-box;
      overflow:hidden;
    }
  `],
  animations: [trigger(
      'openClose',
      [
        state('collapsed, void', style({height: '0px', color: 'maroon', borderColor: 'maroon'})),
        state('expanded', style({height: '*', borderColor: 'green', color: 'green'})),
        transition(
            'collapsed <=> expanded', [animate(500, style({height: '250px'})), animate(500)])
      ])],
  template: `
    <button (click)="expand()">Open</button>
    <button (click)="collapse()">Closed</button>
    <hr />
    <div class="toggle-container" [@openClose]="stateExpression">
      Look at this box
    </div>
  `
})
export class MyExpandoCmp {
  stateExpression: string;
  constructor() { this.collapse(); }
  expand() { this.stateExpression = 'expanded'; }
  collapse() { this.stateExpression = 'collapsed'; }
}

@NgModule({imports: [BrowserModule], declarations: [MyExpandoCmp], bootstrap: [MyExpandoCmp]})
export class AppModule {
}

экспортировано из @angular/core/index, определено в @angular/core/src/animation/metadata.ts

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v2.angular.io/docs/ts/latest/api/core/index/transition-function.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API