[Angular] Two ways to create Angular Animation, using animation() or using state()

We have two blocks to show to difference ways to do animation in Angular:

复制代码
<button (click)="toggleState()">Toggle</button>

<div style="display: flex; align-items: center; align-content: space-between;">

  <section [@heightZeroFull] *ngIf="state === 'active'" style="width: 200px; height: 200px; background: black;">
  </section>

  <section [@heightState]="state" style="width: 200px; height: 200px; background: blue;"></section>
</div>
复制代码

 

heightZeroFull using animation(). heightState using state().

The way to control the state is:

复制代码
  state = 'active';

  toggleState() {
    if (this.state === 'inactive') {
      this.state = 'active';
    } else {
      this.state = 'inactive';
    }
  }
复制代码

 

In the component, we define 'animations':

复制代码
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  animations: [
    heightZeroFull({duration: '500ms'}),
    heightState({height: '200px', duration: '500ms'})
  ]
})
复制代码

We pass in params, so it is more configurable.

 

Animation.ts:

复制代码
import {animation, style, animate, trigger, transition, useAnimation, state} from '@angular/animations';

/*
* DSL
* */
const heightStart =  animation([
  style({
    height: 0
  }),
  animate(
    "{{duration}} ease-in",
    style({
      height: '*'
    })
  )
]);

const heightEnd = animation([
  animate(
    "{{duration}} ease-out",
    style({
      height: 0
    })
  )
]);


/*
* Transition
* */
// Using animation
export const heightZeroFull = (params) => {
  return trigger('heightZeroFull', [
    transition(':enter', useAnimation(heightStart, {params})),
    transition(':leave', useAnimation(heightEnd, {params}))
  ]);
};


// Using state
export const heightState = (params) => {
  return trigger('heightState', [
    state('inactive', style({
      height: 0
    })),
    state('active',   style({
      height: params.height
    })),
    transition('inactive => active', animate(`${params.duration} ease-in`)),
    transition('active => inactive', animate(`${params.duration} ease-out`))
  ]);
};
复制代码

 

posted @   Zhentiw  阅读(235)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-07-27 [GIF] Shape Objects in GIF Loop Coder
点击右上角即可分享
微信分享提示