angular2 ngIf和CSS过渡/animation
我想要一个div在angular2中使用CSS从右侧滑入。
<div class="note" [ngClass]="{'transition':show}" *ngIf="show"> <p> Notes</p> </div> <button class="btn btn-default" (click)="toggle(show)">Toggle</button>
我工作正常,如果我只使用[ngClass]切换类和利用不透明度。 但李先生不希望从一开始就渲染这个元素,所以我先用ng来“隐藏”它,但是这个转换不会起作用。
.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
Plunker
另见https://github.com/angular/angular/blob/master/CHANGELOG.md#400-rc1-2017-02-24
更新2.1.0
Plunker
有关更多详细信息,请参阅angular.io上的animation
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
当expression式变为false
时,将元素从DOM中移除。 您不能在不存在的元素上进行转换。
使用而不是hidden
:
<div class="note" [ngClass]="{'transition':show}" [hidden]="!show">
根据最新的angular 2文档, 您可以为“input和离开”元素设置animation (如angular度1)。
简单淡出animation的例子:
在相关的@Component中添加:
animations: [ trigger('fadeInOut', [ transition(':enter', [ // :enter is alias to 'void => *' style({opacity:0}), animate(500, style({opacity:1})) ]), transition(':leave', [ // :leave is alias to '* => void' animate(500, style({opacity:0})) ]) ]) ]
不要忘记添加import
import {style, state, animate, transition, trigger} from '@angular/core';
相关组件的HTML元素应该如下所示:
<div *ngIf="toggle" [@fadeInOut]>element</div>
我在这里build立幻灯片和淡入淡出的例子。
“void”和“*”的解释:
-
void
是ngIf
设置为false时的状态(当元素没有附加到视图时适用)。 -
*
– 可以有许多animation状态(在文档中阅读更多)。*
状态优先于所有这些作为“通配符”(在我的示例中,这是ngIf
设置为true
时的状态)。
通知 (取自angular度文件):
angular度animationbuild立在标准的Web Animations API之上,并在支持它的浏览器上本地运行。 对于其他浏览器,则需要填充。 从GitHub抓取web-animations.min.js并将其添加到您的页面。
trigger('slideIn', [ state('*', style({ 'overflow-y': 'hidden' })), state('void', style({ 'overflow-y': 'hidden' })), transition('* => void', [ style({ height: '*' }), animate(250, style({ height: 0 })) ]), transition('void => *', [ style({ height: '0' }), animate(250, style({ height: '*' })) ])
适用于现代浏览器的CSS解决scheme
@keyframes slidein { 0% {margin-left:1500px;} 100% {margin-left:0px;} } .note { animation-name: slidein; animation-duration: .9s; display: block; }
- 当用户不在授权angular色中时,如何提供未经授权的页面?
- CSS3的border-radius属性和border-collapse:collapse不要混合。 我怎样才能使用边界半径来创build一个圆angular的折叠表?
- 如何添加“类”主机元素?
- 使用TypeScript从Angular2的http数据链接RxJS Observable
- angular.service vs angular.factory
- 如何作为一个模块的孩子路由到一个模块 – Angular 2 RC 5
- Twitter Bootstrap中的圆桌
- ngModule中的entryComponents是什么?
- select器“my-app”与任何元素都不匹配