【发布时间】:2018-01-26 14:25:37
【问题描述】:
我有一个通常处于休眠状态的组件(我只是说它对用户没有什么兴趣),但是在某种状态下,这个组件会被“激活”,我想把它放在屏幕并将其放大以吸引用户的注意力。
这些组件中有几个处于休眠状态,但只有 1 个被激活。休眠组件可以在屏幕上的任何位置,所以我想要一个解决方案,在激活时将组件从它原来所在的位置转换到屏幕中间,然后在完成后将其返回到原来的休眠位置。
尝试这样做:
模板:
<div #myElement [@isActivated]="activated">
Hello Stack Overflow
<button (click)="activated = activated === 'activated' ? 'dormant' : 'activated">
Toggle
</button>
</div>
打字稿:
@Component({
// ...
animations: [
trigger('isActivated', [
state('dormant', style($transitionToActivated)),
state('activated', style({
transform: 'translateX(0%) translateY(0%) scale(1)'
})),
transition('dormant => activated', animate('1000ms ease')),
transition('activated => dormant', animate('1000ms ease'))
])
]
})
export class MyComponent implements OnInit {
@ViewChild('myElement') myElement: ElementRef;
activated = 'dormant';
transitionToActivated: any;
ngOnInit() {
let rect = this.myElement.nativeElement.getBoundingClinetRect();
this.transitionToActivated = {
transform: ''translateX(' + ((window.screen.width / 2) - (rect.right + rect.left) / 2) + ') translateY(' +
((window.screen.height / 2) - (rect.top + rect.bottom) / 2) + ') scale(1.5)'
}
}
}
我的语法是关闭的:组件装饰器内部的 $transitionToActivated 无效。这种带有 Angular Animations 的响应式动画是否可行?还是我需要研究纯 CSS 解决方案?
[这是我正在尝试的plunker...目前我试图将它放在精确中心的尝试已被注释掉,只是一些静态动画说明]
【问题讨论】:
-
你能试试这些变量作为输入参数吗?就像下面链接中提到的那样? yearofmoo.com/2017/06/…
-
嘿@AravindS,你知道从你发送的链接中将变量放入 {time: "1s", opacity: "1"} 对象的语法(或者如果你甚至可以的话)吗?双髭?
标签: angular5 angular-animations