1. ホーム
  2. css

[解決済み] angular 2 ngIf と CSS transition/animation

2022-04-30 04:34:41

質問

angular2でcssを使ってdivを右からスライドさせたいのですが、どうすればいいですか?

  <div class="note" [ngClass]="{'transition':show}" *ngIf="show">
    <p> Notes</p>
  </div>
  <button class="btn btn-default" (click)="toggle(show)">Toggle</button>

ngClass]を使ってクラスを切り替え、不透明度を利用するだけならうまくいくのですが。 しかし、その要素を最初からレンダリングしたくないので、最初にngIfでそれを"hide"しましたが、そうすると遷移がうまくいきません。

.transition{
  -webkit-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out;
  -moz-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out;
  -ms-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out ;
  -o-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out;
  transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out;
  margin-left: 1500px;
  width: 200px;
  opacity: 0;
}

.transition{
  opacity: 100;
  margin-left: 0;
}

解決方法は?

アップデート 4.1.0

プランカー

こちらもご覧ください https://github.com/angular/angular/blob/master/CHANGELOG.md#400-rc1-2017-02-24

アップデート 2.1.0

プランカー

詳細はこちらをご覧ください。 angular.ioのアニメーション

import { trigger, style, animate, transition } from '@angular/animations';

@Component({
  selector: 'my-app',
  animations: [
    trigger(
      'enterAnimation', [
        transition(':enter', [
          style({transform: 'translateX(100%)', opacity: 0}),
          animate('500ms', style({transform: 'translateX(0)', opacity: 1}))
        ]),
        transition(':leave', [
          style({transform: 'translateX(0)', opacity: 1}),
          animate('500ms', style({transform: 'translateX(100%)', opacity: 0}))
        ])
      ]
    )
  ],
  template: `
    <button (click)="show = !show">toggle show ({{show}})</button>

    <div *ngIf="show" [@enterAnimation]>xxx</div>
  `
})
export class App {
  show:boolean = false;
}

オリジナル

*ngIf になったとき、その要素を DOM から削除します。 false . 存在しない要素に遷移を持たせることはできません。

代わりに使うのは hidden :

<div class="note" [ngClass]="{'transition':show}" [hidden]="!show">