【发布时间】:2021-01-07 05:47:04
【问题描述】:
使用此代码,我正在模拟sidemenu,因此如果我单击包含overlay 的button,则将打开包含sidemenu 并且sidemenu 向右移动。如果我clickoutside,overlay 消失,菜单返回到初始位置。
.html
<div class="menuside_container" (click)="fn_hideSideMenu()" [ngClass]="showSideMenuContainer?showSideMenuContainer:''">
<div class="menuside" [ngClass]="{showmenu:showMenu, hidemenu:!showMenu}">
<a class="menu-item d-block" style="height:46px">
option 1
</a>
<a class="menu-item d-block" style="height:46px">
option 2
</a>
<a class="menu-item d-block" style="height:46px">
option 3
</a>
<hr class="m-0">
</div>
</div>
<button (click)="fn_showSideMenu()">show menu</button>
.ts
showMenu: boolean = false;
showSideMenuContainer: any = "d-none";
fn_showSideMenu() {
setTimeout(() => {
this.showMenu = true;
});
this.showSideMenuContainer = "d-block";
}
fn_hideSideMenu() {
this.showMenu = false;
setTimeout(() => {
this.showSideMenuContainer = "d-none";
}, 400);
}
.menuside {
position: absolute;
top: 0px;
width: 304px;
transition: all 0.3s linear;
background-color: #eaeaea;
height: 100%;
}
.menuside_container {
position: fixed;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 999;
}
.css
.showmenu {
left: 0px;
}
.hidemenu {
left: -500px;
}
此代码有效,但我认为我使事情复杂化了很多,也许我不需要将代码放在我的 .ts 中,但我的想法是,我只想知道我是否可以解决相同的效果有来自css 和/或html 的angular 代码
我希望当我单击button 以显示overlay 然后从sidemenu 向右过渡,当我单击覆盖显示后,它将显示从我的过渡sidemenu 到它的起点。
关于问题标题,我之所以这么说是因为如果我把一个display: none开头的.menuside_container,sidemenu的过渡不会显示出来
谢谢。 我只是在为我的问题寻找最佳解决方案
这是我的实时代码(见app/app.component.html/ts/css):
https://stackblitz.com/edit/angular-ng-bootstrap-wa3xto?file=app%2Fapp.component.html
注意:
我基本上想做 gif 中显示的内容,但以更优化的方式。我使用setTimeouts 来实现它。但正如问题所说,我对如何将具有不透明度效果的元素从 1 转换为 0 但最后具有属性 display: none 很感兴趣。为什么?我想完全隐藏一个元素,但是使用opacity: 0 它仍然会占据space,即使它不可见
【问题讨论】:
-
嘿@yavg,你能澄清一下你的问题,或者至少进一步解释一下吗??
-
我认为你应该使用角度动画,而不是 CSS 会更有效。
-
@OwaisAhmedKhan 朋友,我基本上想做 gif 中显示的内容,但以更优化的方式。我使用
settimeouts来实现它。但正如问题所说,我对如何将具有不透明度效果的元素从 1 转换为 0 但最后具有属性display: none很感兴趣。为什么?我想完全隐藏一个元素,但是使用opacity: 0它仍然会占据空间,即使它不可见 -
我认为,更好的方法是在您的菜单上用
animationend事件替换setTimeout -
@CedricCholley 谁能做到?