PagesComponentのメニュー部にアニメーションを設定します。準備として pages.component.html を次のように書き換えます

<ul>
  <li *ngFor="let menu of links; let i = index">
    <a routerLink="{{menu.url}}"
      [@menuState]="menu.state" (click)="onClick(i)">
      {{menu.name}}
    </a>
  </li>
</ul>
<router-outlet></router-outlet>

pages.component.ts にアニメーションを定義します。アニメーションは @Componentanimations で実装します。

import { Component, OnInit, Input, trigger, state, style, transition, animate } from '@angular/core';

@Component({
  selector: 'app-pages',
  templateUrl: './pages.component.html',
  styleUrls: ['./pages.component.scss'],
  animations: [
    trigger('menuState', [
      state('inactive', style({
        transform: 'scale(1)'
      })),
      state('active', style({
        borderBottom: '2px solid #333333',
        transform: 'scale(1.2)'
      })),
      transition('inactive => active', animate('300ms ease-in')),
      transition('active => inactive', animate('300ms ease-out'))
    ])
  ]
})
export class PagesComponent implements OnInit {

  menuState: string;

  links = [{
    url: 'top',
    name: 'Top',
    state: 'active'
  }, {
    url: 'issue',
    name: 'Issue',
    state: 'inactive'
  }, {
    url: 'wiki',
    name: 'Wiki',
    state: 'inactive'
  }];

  constructor() {
    this.menuState = 'inactive';
  }

  ngOnInit() {
  }

  onClick(i: number) {
    this.links.forEach(
      (element, index, array) => element.state = (i === index) ? 'active' : 'inactive'
    );
  }
}

ふわっと現れるアンダーラインが作れたと思います。 Angular Animate は angular.io に幾つかサンプルがありますので実際にコードを書いてみると良いです。

results matching ""

    No results matching ""