每当我更改属性的值时,我想创建一个过渡效果。
我尝试过以下
@Component({
selector: 'image-holder',
template: `
<div class="carousel-image">
<img src="{{ image }}" [@slideInRight]="slide" />
<span>{{ text }}</span>
</div>
`,
styleUrls: ['../greenscreen.scss'],
animations: [
trigger(
'slideInRight',
[
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}))
]
)
])
]
})
export class ImageHolderComponent implements OnChanges {
@Input()
image: string;
@Input()
text: string;
public slide: boolean = true;
public ngOnChanges(changes: { [propKey: string]: SimpleChange }){
this.slide = !this.slide;
}
}
我假设更改属性会触发组件再次启动动画效果但不会按预期工作
答案 0 :(得分:8)
您可以对这些用例使用* ngFor,即使它只是一个对象。
@Component({
selector: 'image-holder',
template: `
<div class="carousel-image">
<img [src]="image" *ngFor="let image of [image]" [@slideInRight]/>
<span>{{ text }}</span>
</div>
`,
styleUrls: ['../greenscreen.scss'],
animations: [
trigger(
'slideInRight',
[
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}))
]
)
])
]
})
export class ImageHolderComponent {
@Input()
image: string;
@Input()
text: string;
}
答案 1 :(得分:0)
this.slide =!this.slide将是真的和假的 但当我看到你的触发器时,你说的是 [@slideInRight] =&#34;滑动&#34;
所以基本上,无论是真还是假。
但是当我查看你的动画时,我看到:输入并:离开
如果相反,你做了&#39; true&#39;并且&#39; false&#39;或尝试1和0
然后当slideInRight为true或false时你的动画会起作用,它会触发相应的动画为true和false。
trigger('work', [
state('*', style({transform: 'translateX(0)', opacity: 1})),
state('true', style({'border-right': '50px solid #72BF44', opacity: 1})),
state('false', style({'border-right': '20px solid #72BF44', opacity: 1})),
transition('1 => 0', animate('.125s .1s cubic-bezier(0.29, 0.06, 0.43, 0.92)')),
transition('0 => 1', animate('.125s 0s cubic-bezier(0.29, 0.06, 0.43, 0.92)')),
transition('void => *', [
style({transform: 'translateX(-100%)', opacity: 0}),
animate('1s 1.1s cubic-bezier(0.29, 0.06, 0.43, 0.92)')
])
])
我已经在应用程序中包含了一个示例触发器。
你需要设置你的状态为on和off / true和false或你想要的任何变量值(字符串等)。
然后你有一个转换,从...转到false,或者从false变为true,或者从void变为true,无论你以前的状态和当前状态是什么,转换都会触发。