javascript - Angular Material - 禁用 mat-sidenav 过渡动画但保留 child 动画?

标签 javascript css angular angular-material

我有一个带有 mat-sidenav 的 Angular 应用程序结构如下:

<mat-sidenav-container>
    <mat-sidenav [mode]="'side'">
        <!-- Sidenav content -->
    </mat-sidenav>
    <mat-sidenav-content>
        <!-- Main content -->
    </mat-sidenav-content>
</mat-sidenav-container>
我想禁用 mat-sidenav 的过渡动画但保留 sidenav 内容的动画(例如 mat-vertical-stepper )。但是,我一直无法找到一种方法来做到这一点。
到目前为止,我已经找到了 this similar GitHub issue ,但那里描述的修复似乎也禁用了 sidenav 内容的动画。例如,我尝试了以下方法:
<mat-sidenav-container [@.disabled]="true">
    <mat-sidenav [mode]="'side'">
        <!-- Sidenav content -->
    </mat-sidenav>
    <mat-sidenav-content>
        <!-- Main content -->
    </mat-sidenav-content>
</mat-sidenav-container>
这会禁用 sidenav 过渡动画,但也会禁用所有其他动画。以下似乎也不起作用:
<mat-sidenav-container [@.disabled]="true">
    <mat-sidenav [mode]="'side'" [@.disabled]="false">
        <!-- Sidenav content -->
    </mat-sidenav>
    <mat-sidenav-content [@.disabled]="false">
        <!-- Main content -->
    </mat-sidenav-content>
</mat-sidenav-container>
我还找到了 this article in Angular's documentation ,但它看起来非常复杂,我无法弄清楚如何将它应用于没有自定义动画的组件(如 mat-vertical-stepper )。
有什么简单的方法可以禁用 mat-sidenav的过渡动画同时仍保留其子动画?

最佳答案

这是一种解决方法。
暂时禁用它。
Demo
在 HTML 中:

<mat-sidenav-container [@.disabled]="temporaryDisabled">
  <mat-sidenav [mode]="'side'" #sidenav> 
    Sidenav content
  </mat-sidenav>
  <mat-sidenav-content>
    <div class="header">
      <button mat-stroke-button (click)="toggle()">toggle sidenav</button>
    </div>
    <div class="stepper">
      <mat-vertical-stepper [linear]="isLinear" #stepper >
        (... stepper codes ...)
      </mat-vertical-stepper>
    </div>
  </mat-sidenav-content>
</mat-sidenav-container>
在 .ts 文件中:
temporaryDisabled: boolean = false;
toggle(){
  this.temporaryDisabled = true;
  this.sidenav.toggle();
  setTimeout(()=>{
    this.temporaryDisabled = false;
  },10);
}

关于javascript - Angular Material - 禁用 mat-sidenav 过渡动画但保留 child 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66886325/

相关文章:

拉斐尔.js : How to drag one side of the path in my case?

html - 当大小基于页面宽度时如何使用css水平对齐

angular - 使用 angular 4 在 mat-table 中添加一个新行

javascript - 使用相同的脚本独立触发每个 div

html - 更改 CSS 位置的引用点

angular - 在 angular 中使用::ng-deep 推荐

angular - 在 Angular 2 上,当我只从一个大库中导入一个模块时,构建会发生什么?

javascript - jQuery中,如何在指定元素后加载ajax内容

javascript - 如何修复输入向后返回的问题

javascript - 如何使用 Protractor 通过 CSS 代码单击元素?