Angular。动画弹性元素
Angular. Animating flex elements
你好。我有一个看起来像这样的小组件:
点击搜索后变成:
标记中有两个 flex
元素:用于 header (flex: 1
) 和用于搜索。在搜索中单击我隐藏第一个并展开第二个。现在我想为过渡设置动画。
我从 header 元素的动画开始。首先我尝试动画 width
:
transition(':enter', [
style({width: 0, 'max-width': 0}),
animate(500, style({width: '*', 'max-width': '*'})),
]),
transition(':leave', [
style({width: '*', 'max-width': '*'}),
animate(500, style({width: 0, 'max-width': 0})),
]),
输入时几乎是即时的,Header
单词向左滑动而不是收缩。 (在 header 上设置 overflow: hidden
会完全破坏动画)
然后我尝试制作动画 flex-grow
:
transition(':enter', [
style({'flex-grow': '0.001'}),
animate(500, style({'flex-grow': '1'})),
]),
transition(':leave', [
style({'flex-grow': '1'}),
animate(500, style({'flex-grow': '0.001'})),
]),
进入时动画更好,离开时几乎没有动画。将两者结合起来:
transition(':enter', [
style({'flex-grow': '0.001'}),
animate(500, style({'flex-grow': '1'})),
]),
transition(':leave', [
style({width: '*', 'max-width': '*'}),
animate(500, style({width: 0, 'max-width': 0})),
]),
有什么办法可以修复滑动 header?
解决方案是也为输入元素设置动画。在这种情况下,只有 width
属性 需要动画:
trigger('anim', [
transition(':enter', [
style({width: 0}),
animate(250, style({width: '*'})),
]),
transition(':leave', [
style({width: '*'}),
animate(250, style({width: 0})),
]),
]),
你好。我有一个看起来像这样的小组件:
点击搜索后变成:
标记中有两个 flex
元素:用于 header (flex: 1
) 和用于搜索。在搜索中单击我隐藏第一个并展开第二个。现在我想为过渡设置动画。
我从 header 元素的动画开始。首先我尝试动画 width
:
transition(':enter', [
style({width: 0, 'max-width': 0}),
animate(500, style({width: '*', 'max-width': '*'})),
]),
transition(':leave', [
style({width: '*', 'max-width': '*'}),
animate(500, style({width: 0, 'max-width': 0})),
]),
输入时几乎是即时的,Header
单词向左滑动而不是收缩。 (在 header 上设置 overflow: hidden
会完全破坏动画)
然后我尝试制作动画 flex-grow
:
transition(':enter', [
style({'flex-grow': '0.001'}),
animate(500, style({'flex-grow': '1'})),
]),
transition(':leave', [
style({'flex-grow': '1'}),
animate(500, style({'flex-grow': '0.001'})),
]),
进入时动画更好,离开时几乎没有动画。将两者结合起来:
transition(':enter', [
style({'flex-grow': '0.001'}),
animate(500, style({'flex-grow': '1'})),
]),
transition(':leave', [
style({width: '*', 'max-width': '*'}),
animate(500, style({width: 0, 'max-width': 0})),
]),
有什么办法可以修复滑动 header?
解决方案是也为输入元素设置动画。在这种情况下,只有 width
属性 需要动画:
trigger('anim', [
transition(':enter', [
style({width: 0}),
animate(250, style({width: '*'})),
]),
transition(':leave', [
style({width: '*'}),
animate(250, style({width: 0})),
]),
]),