Angular 2 的 ngIf 和 CSS 过渡/动画
如何在 Angular 2 中使用 CSS 将 div 从右侧滑入?
<code class="html"><div class="note" [ngClass]="{'transition':show}" *ngIf="show"> <p> Notes</p> </div> <button class="btn btn-default" (click)="toggle(show)">Toggle</button></code>
.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; }
如果仅使用 [ngClass] 来切换类,并且 利用 opacity,则该代码可以正常工作。但是不想让该元素从一开始就被渲染,所以先用 ngIf "隐藏"它,但此时过渡将不起作用。
更新 4.1.0
使用了过渡动画API,无需再利用 [hidden] 或者 [*ngIf hidden]。
更新 2.1.0
<code class="typescript">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; }</code>
原始回答
当表达式变为 false 时,*ngIf 会从 DOM 中移除元素,一个不存在的元素是无法进行过渡的。
可以使用 hidden 属性代替:
<code class="html"><div class="note" [ngClass]="{'transition':show}" [hidden]="!show"></code>
以上是以下是几种可能的标题: 1. How to Make CSS Transitions Work with `ngIf` in Angular 2? 2. Why Does `ngIf` Break My CSS Transitions in Angular 2? 3. Angular 2: Combining `ngIf` and CSS Animations for Smooth Trans的详细内容。更多信息请关注PHP中文网其他相关文章!