如何为 Angular Material 扩展面板中的图标设置动画?

2024-03-28

我正在尝试为扩展面板标题内的图标设置动画。

我的HTML:

<mat-expansion-panel-header>
  <mat-panel-title>
      <mat-icon [@openClose]="panelOpenState? 'open' : 'closed'">keyboard_arrow_up</mat-icon>
    Click me, all other animates
  </mat-panel-title>
  <mat-panel-description>
    Type your name and age
  </mat-panel-description>
</mat-expansion-panel-header>

我的组件:

@Component({
  selector: 'expansion-overview-example',
  animations: [
    trigger('openClose', [
      // ...
      state('open', style({
        transform: 'rotate(0deg)'
      })),
      state('closed', style({
        transform: 'rotate(-180deg)'
      })),
      transition('open => closed', [
        animate('1s')
      ]),
      transition('closed => open', [
        animate('1s')
      ]),
    ]),
  ],
  templateUrl: 'expansion-overview-example.html',
  styleUrls: ['expansion-overview-example.css'],
})
export class ExpansionOverviewExample {
  panelOpenState = false;
}

然而。单击的扩展面板上的图标没有动画(在我的情况下旋转)。我尝试在代码中的不同位置使用相同的图标和相同的状态,并且所有其他图标都具有动画效果,因此我知道触发器和动画设置正确。

如何确保图标也在单击的面板上旋转?

这里有一个斯塔克闪电战 https://stackblitz.com/edit/angular-4heuy9说明我的问题


奇怪 - 可能是一个错误。

要解决此问题,请使用样式定义过渡和初始变换,并从动画定义中删除过渡:

SCSS

.mat-expansion-panel-header-title > .mat-icon {
  transition: 1s;
  transform: rotate(0deg);
}

TS

animations: [
  trigger('openClose', [
    // ...
    state('open', style({
      transform: 'rotate(0deg)'
    })),
    state('closed', style({
      transform: 'rotate(-180deg)'
    })),
  ]),
],
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Angular Material 扩展面板中的图标设置动画? 的相关文章

随机推荐