2

在官方教程的帮助下,我在@angular/animations中迈出了第一步。我添加了必需的库并创建了我的第一个动画。我已经知道什么是过渡和状态。我可以创建简单的动画(改变背景颜色和改变元素的大小。

我在我的项目中使用@angular/flex-layout库来创建整洁的页面布局。问题来了:如何为我的 flex 布局增加和减少元素的宽度设置动画?例如:

模拟动画状态

我的页面上有 3 个“列”:

  1. 在第一种状态下,它们的宽度是:容器的 38%、52%、10%
  2. 第二种状态下,它们的宽度是:50%, 25%, 25%

就像图片中一样(这些是其他州的相同列)

问题:我应该如何进行转换以动画改变列的宽度?我可以使用哪些方法和属性?应该是什么样的代码?

=====

@编辑:

我发布了我的 HTML 代码片段以显示我想要更改的属性 ( fxFlex )

app.component.html

<div class="flex-container"
    fxLayout="row"
    fxLayout.xs="column"
    fxLayoutAlign="end none"
    fxLayoutAlign.xs="end none" class="container-style">

    <!-- first column -->
    <div class="flex-item" fxFlex="38%" fxShow.xs="false" class="one" [@oneState]="state"></div>

    <!-- second column -->
    <div class="flex-item" fxFlex="52%" class="two" [@twoState]="state"></div>

    <!-- third column -->
    <div class="flex-item" fxFlex class="three"></div>
</div>

对于app.component.ts

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  animations: [
    trigger('oneState', [
      state('inactive', style({
        //I have no idea what I should use to change fxFlex attribute!
        //Style? Maybe, something else?
      })),
      state('active',   style({
        //I have no idea...
      })),
      transition('inactive => active', animate('100ms ease-in')),
      transition('active => inactive', animate('100ms ease-out'))
    ]),
    trigger('twoState', [
      state('inactive', style({
        //I have no idea what I should use to change fxFlex attribute!
        //Style? Maybe, something else?
      })),
      state('active',   style({
        //I have no idea...
      })),
      transition('inactive => active', animate('100ms ease-in')),
      transition('active => inactive', animate('100ms ease-out'))
    ]),
  ]
})
export class AppComponent {
  title = 'app works!';

  state: string = 'inactive';

  toggleMove() {
    this.state = (this.state === 'inactive' ? 'active' : 'inactive');
    console.log(this.state);
  }

}

我知道我可以以简单的方式更改 div 的样式。但我不想改变风格。我想更改元素的 fxFlex 属性

任何人都可以帮助我吗?可能吗??

4

1 回答 1

2

您实际上并不需要角度动画,您可以创建一个<col>组件,如下所示:

@Component({
  selector: "col",
  styles:[`
  :host{
    transition: width 300ms linear;
    display:block;
  }
  `],
  template:`<ng-content></ng-content>`
})
export class ColComponent{
  @Input()
  @HostBinding("style.width")
  fxFlex:string;
}

然后在您的应用程序模板中使用它<col fxFlex="50%"></col>(请注意,您可以使用另一个selector类似"div[flexible]"或其他...

我创建了一个plunker

于 2017-03-29T08:15:04.183 回答