当前位置: 首页 > 知识库问答 >
问题:

angular 6动画*ngIf,过渡不起作用

林玮
2023-03-14

该项目提供了两种动画变体。

动画选项1,触发器('imationOption1')
无投诉。

动画选项2,触发器('imationOption2')
转换在此处不起作用。

在线查看这个项目在StackBlitz.com

app.component.html

<h1>Animation Option 1</h1>
<div (click)="changeDivState()"
     [@animationOption1]="clickedDivState"
>Click Me
</div>

<h1>Animation Option 2</h1>
<button (click)="toggleMenu()">Click Me</button>
<ul *ngIf="isMenuOpen"
    [@animationOption2]="isMenuOpen ? 'open': 'close'"
>
  <li>Menu Item 1</li>
  <li>Menu Item 2</li>
  <li>Menu Item 3</li>
</ul>

应用程序组件.ts

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  animations: [
    trigger('animationOption1', [
      state('start', style({
        backgroundColor: 'yellow',
        width: '150px',
        height: '150px'
      })),
      state('end', style({
        backgroundColor: 'green',
        width: '300px',
        height: '300px'
      })),
      transition('start => end', animate(1500)),
      transition('end => start', animate('800ms 0.5s ease-out'))
    ]),
    trigger('animationOption2', [
      state('close', style({
        opacity: 0,
        backgroundColor: 'yellow'
      })),
      state('open', style({
        opacity: 1,
        backgroundColor: 'green'
      })),
      transition('close <=> open', animate(3000)),
    ])
  ]
})
export class AppComponent {
  isMenuOpen = false;

  clickedDivState = 'start';

  changeDivState() {
    this.clickedDivState = 'end';
    setTimeout(() => {
      this.clickedDivState = 'start';
    }, 3000);
  }

  toggleMenu(): void {
    this.isMenuOpen = !this.isMenuOpen;
  }
}

谷歌搜索并没有导致解决方案。

共有1个答案

巴照
2023-03-14

要使其正常工作,您需要删除上的*ngIF="isMenuOpen"

这是一个 StackBlitz,显示了删除 *ngIf 的动画。

或者,您可以利用进入/离开状态与 *ngIf 结合使用。它看起来像这样:

trigger('animationOption2', [      
  transition(':enter', [
    style({ backgroundColor: 'yellow' }),
    animate(300)
  ]),
  transition(':leave', [
    animate(300, style({ backgroundColor: 'yellow' }))
  ]),
  state('*', style({ backgroundColor: 'green' })),
])

这里有一个StackBlitz在运行。

 类似资料:
  • 我正在寻求对组件中的徽章进行动画处理。它有两种可能的状态: 隐藏 显示 当徽章从隐藏转变为显示时,我希望它淡入页面,当徽章由显示转变为隐藏时,我想它淡出。这部分工作得很好-我只需在0和1之间更改不透明度值的状态。 然而,当徽章被隐藏时,它仍然在DOM上,因为它是按钮的一部分,所以在鼠标悬停时看到徽章仍然被占用的所有空白空间看起来很奇怪。理想情况下,当它被隐藏时,我希望它从DOM中消失。 为此,当徽

  • 我想要一个div从右边滑入角2使用CSS。 如果我只使用[ngClass]来切换类和使用不透明度,我就能正常工作。但是li不想从一开始就呈现该元素,所以我首先用ngIf“隐藏”它,但是之后的过渡就不起作用了。

  • 问题内容: 我希望div使用CSS从右角2滑入。 如果我仅使用[ngClass]来切换类并利用不透明性,则可以正常工作。但是li不想从一开始就渲染该元素,因此我先用ngIf“隐藏”了它,但是之后过渡将无法工作。 问题答案: 更新4.1.0 柱塞 另请参见https://github.com/angular/angular/blob/master/CHANGELOG.md#400-rc1-2017-

  • 主要内容:过渡,实例,实例,实例,实例,JavaScript 钩子,HTML 代码:,JavaScript 代码:,实例,初始渲染的过渡本章节我们主要讨论 Vue.js 的过渡效果与动画效果。 过渡 Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。 Vue 提供了内置的过渡封装组件,该组件用于包裹要实现过渡效果的组件。 语法格式 我们可以通过以下实例来理解 Vue 的过渡是如何实现的: 实例 <div id = "databinding"> <button v-on:c

  • 问题内容: 因此,我了解了如何同时执行CSS3过渡和动画。我用谷歌搜索的不清楚是什么时候使用它。 例如,如果我想使球弹跳,很明显,动画是必经之路。我可以提供关键帧,而浏览器将做中间帧,并且我将获得一个不错的动画。 然而,在某些情况下,无论哪种方式都可以达到上述效果。一个简单而常见的示例是实现Facebook风格的滑动抽屉菜单: 可以通过以下过渡来实现此效果: 或者,通过类似这样的动画: 使用HTM

  • 内置过渡动画 Element 内应用在部分组件的过渡动画,你也可以直接使用。在使用之前请阅读 transition 组件文档 。 fade 淡入淡出 提供 el-fade-in-linear 和 el-fade-in 两种效果。 <template> <div> <el-button @click="show = !show">Click Me</el-button> <di