【发布时间】:2019-01-14 14:03:42
【问题描述】:
我正在掌握角度动画,并且我正在尝试制作一个可以正确动画的标题。 我一直在关注本教程:
https://netbasal.com/reactive-sticky-header-in-angular-12dbffb3f1d3
这正在帮助我创建我的标题,但我不希望它完全按照他们正在做的事情,这就是我需要一些帮助的原因。 首先,向下滚动页面时;我不希望整个标题消失。相反,我希望它缩小到 10px 左右;当我向上滚动时,我希望它转到 60px; 我已将动画更改为:
trigger('toggle', [
state(
VisibilityState.Hidden,
style({ opacity: 1, height: '10px' })
),
state(
VisibilityState.Visible,
style({ opacity: 1, height: '60px' })
),
transition('* => *', animate('200ms ease-in'))
])
它的工作范围很广。 我的模板中有一些内容在标题出现时不会缩小。 我的标题组件的 CSS 如下所示:
:host {
position: fixed;
top: 0;
width: 100%;
text-align: center; // TODO: only for testing, remove later
background-color: indigo; // TODO: only for testing, remove later
}
HTML 看起来像这样:
<div class="header">
<p>This is the header</p>
</div>
所以,这个问题的第一部分是,当菜单被压缩时,我如何使内容(无论是什么)隐藏?我相信这很容易:)
第二部分,我想添加一个新的事件/动画。当您将鼠标悬停在压缩形式的菜单上时,我希望它扩展为原始大小(就像您向上滚动页面一样)。 这对我来说很难,如果你能给我任何帮助,我将不胜感激。
* 更新 *
我设法让第二部分工作。 我将我的 HTML 更改为:
<div class="header" (mouseenter) ="mouseEnter() " (mouseleave) ="mouseLeave()">
<p>This is the header</p>
</div>
并为组件添加了一个新属性和两个新方法:
private wasVisible = this.isVisible;
mouseEnter() {
this.wasVisible = this.isVisible === true;
this.isVisible = true;
}
mouseLeave() {
this.isVisible = this.wasVisible === true;
}
所以,当我悬停组件时,如果它已经可见,它将保持这种状态,当我离开时,它将重置为我进入组件之前的样子。 如果组件被压缩,它将解压缩它,当我们移出时,它会将其恢复为压缩状态。
现在我只需要弄清楚如何对内容进行排序。
【问题讨论】:
-
你是如何将动画连接到标题的?应该有
[@toggle]="state"之类的东西。 -
你可以在我给出的那个链接中看到它;它是组件代码的一部分