gpt4 book ai didi

css - Angular - 使用变换制作动画,但在动画完成时不应用绝对位置

转载 作者:行者123 更新时间:2023-11-28 03:46:22 25 4
gpt4 key购买 nike

所以我正在尝试应用一些流畅的动画,它们的效果还不错,但效果不是很好,因为它们会破坏很多布局。

问题是我需要在设置动画时使用 position: absolute 以便我可以使用 transform,如下所示:

export function SlideLeft() {

return trigger('slideLeft', [
state('void', style({position: 'absolute', width: '100%', transform: 'translate3d(100%, 0, 0)'}) ),
state('*', style({position: 'absolute', width: '100%', transform: 'translate3d(0, 0, 0)'}) ),
transition(':enter', [
style({transform: 'translate3d(100%, 0, 0)'}),
animate('400ms ease', style({transform: 'translate3d(0, 0, 0)'}))
]),
transition(':leave', [
style({transform: 'translate3d(0, 0, 0)'}),
animate('400ms ease', style({transform: 'translate3d(100%, 0, 0)'}))
])
]);
}

用法:

@Component({
animation: [SlideLeft()]
})

export class SomeComponent {

@HostBinding('@slideLeft') value = '';
}

虽然这可行,但它会在动画完成时破坏元素高度,因为组件不再是页面流的一部分。

相反,我想做的是像上面那样制作动画,但是当动画完成后,我想删除 position: absolute 位。

我认为我可以通过从 void* 样式对象中删除 position: absolute 来实现这一点,但这只会导致动画彻底打破。

是否有可能实现我想要的,如果可以,我将如何实现?

最佳答案

这会起作用,它只会为 absolute 位置设置动画,但不会将其留在元素上:

export function SlideLeft() {

return trigger('slideLeft', [
state('*', style({position: relative, width: '100%'}) ),
transition(':enter', [
style({position: 'absolute', transform: 'translate3d(100%, 0, 0)'}),
animate('400ms ease', style({transform: 'translate3d(0, 0, 0)'}))
]),
transition(':leave', [
style({position: 'absolute', transform: 'translate3d(0, 0, 0)'}),
animate('400ms ease', style({transform: 'translate3d(100%, 0, 0)'}))
])
]);
}

关于css - Angular - 使用变换制作动画,但在动画完成时不应用绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43950573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com