You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Angular-Material创建全屏覆盖导航?求Angular风格示例

Angular Material + Angular 5 + Flex-Layout 全屏覆盖式导航实现示例

嘿,我刚好之前做过适配这个技术栈的全屏覆盖导航,完全是Angular风格的模块化实现,你可以直接拿过来用,省得自己造轮子:

1. 生成专属组件

先通过Angular CLI创建一个独立的组件,保证代码模块化:

ng generate component fullscreen-overlay-nav

2. 组件模板(fullscreen-overlay-nav.component.html)

这里用Angular Material的基础组件+Flex-Layout来实现全屏布局,逻辑清晰:

<!-- 触发按钮 -->
<button mat-icon-button (click)="toggleOverlay()">
  <mat-icon>menu</mat-icon>
</button>

<!-- 全屏覆盖导航层 -->
<div *ngIf="isOverlayOpen" 
     class="fullscreen-overlay"
     fxLayout="column"
     fxLayoutAlign="center center"
     (click)="closeOverlay()">
  <!-- 导航列表 -->
  <mat-list class="nav-list">
    <mat-list-item (click)="handleNavClick('home'); $event.stopPropagation()">
      <mat-icon>home</mat-icon>
      <span>首页</span>
    </mat-list-item>
    <mat-list-item (click)="handleNavClick('profile'); $event.stopPropagation()">
      <mat-icon>person</mat-icon>
      <span>个人中心</span>
    </mat-list-item>
    <mat-list-item (click)="handleNavClick('settings'); $event.stopPropagation()">
      <mat-icon>settings</mat-icon>
      <span>设置</span>
    </mat-list-item>
  </mat-list>
</div>

3. 组件样式(fullscreen-overlay-nav.component.scss)

设置全屏覆盖的样式,结合Material的视觉风格:

.fullscreen-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: rgba(0, 0, 0, 0.9);
  z-index: 1000; /* 确保在其他内容之上 */
  cursor: pointer;

  .nav-list {
    width: 100%;
    max-width: 300px;
    cursor: default;

    mat-list-item {
      color: white;
      font-size: 1.5rem;
      padding: 1rem 2rem;
      transition: background-color 0.2s;

      &:hover {
        background-color: rgba(255, 255, 255, 0.1);
      }

      mat-icon {
        margin-right: 1rem;
        font-size: 2rem;
      }
    }
  }
}

4. 组件逻辑(fullscreen-overlay-nav.component.ts)

控制导航的显示/隐藏,以及导航项的点击逻辑:

import { Component } from '@angular/core';
import { Router } from '@angular/router';

@Component({
  selector: 'app-fullscreen-overlay-nav',
  templateUrl: './fullscreen-overlay-nav.component.html',
  styleUrls: ['./fullscreen-overlay-nav.component.scss']
})
export class FullscreenOverlayNavComponent {
  isOverlayOpen = false;

  constructor(private router: Router) {}

  toggleOverlay(): void {
    this.isOverlayOpen = !this.isOverlayOpen;
  }

  closeOverlay(): void {
    this.isOverlayOpen = false;
  }

  handleNavClick(route: string): void {
    this.closeOverlay();
    // 这里添加路由跳转逻辑,适配你的项目路由
    this.router.navigate([`/${route}`]);
  }
}

5. 模块导入(确保在你的模块中添加这些依赖)

在AppModule或者对应功能模块中导入所需的Angular Material和Flex-Layout模块(注意Angular 5要匹配对应版本的依赖,比如@angular/flex-layout@5.x.x):

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatListModule } from '@angular/material/list';
import { FlexLayoutModule } from '@angular/flex-layout';
import { RouterModule } from '@angular/router';

import { FullscreenOverlayNavComponent } from './fullscreen-overlay-nav/fullscreen-overlay-nav.component';
import { AppComponent } from './app.component';

// 示例路由配置,替换成你的项目路由
const routes = [
  { path: 'home', component: /* 你的首页组件 */ },
  { path: 'profile', component: /* 你的个人中心组件 */ },
  { path: 'settings', component: /* 你的设置组件 */ },
  { path: '', redirectTo: '/home', pathMatch: 'full' }
];

@NgModule({
  declarations: [
    AppComponent,
    FullscreenOverlayNavComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule, // Material组件必须依赖动画模块
    MatButtonModule,
    MatIconModule,
    MatListModule,
    FlexLayoutModule,
    RouterModule.forRoot(routes)
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

6. 使用组件

直接在你的根组件或者需要的地方引入这个导航组件即可:

<app-fullscreen-overlay-nav></app-fullscreen-overlay-nav>
<!-- 其他页面内容 -->

可选优化

  • 如果需要动画效果,可以引入Angular的@angular/animations模块,给覆盖层添加淡入淡出/滑入滑出的动画
  • 可以根据需求修改背景色、导航项的样式或者布局方式
  • 若需要支持键盘关闭(比如ESC键),可以在组件中添加键盘事件监听

内容的提问来源于stack exchange,提问作者userx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:09:22