Angular学习笔记:动画

news2024/11/24 8:53:39

本文是自己的学习笔记,主要参考资料如下。

- Angular官方文档:https://angular.io/guide/animations


  • 1、前置工作
    • 1.1、导入依赖
  • 2、代码部分
    • 2.1、有关的imports
    • 2.2、定义触发条件(trigger)
    • 2.3、定义状态(state)
    • 2.4、定义过渡细节(transition)
    • 2.5、动画绑定元素


1、前置工作

这篇文章介绍如何用Angular实现动画效果,比如划入划出,缩小变大。

1.1、导入依赖

先要在app.module.tsimport对应的包BrowserAnimationsModule

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';


@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

2、代码部分

这部分是一个示例,演示点击一个button后,一个div平滑地变大变小同时改变颜色。
在这里插入图片描述

2.1、有关的imports

在想要有动画效果的组件中引入下面与动画细节相关的组件,

这些组件与动画的具体效果有关,比如一个元素变化前的样子和变化后的样子,元素从A点移到B点花多少时间,恒速度移过去还是速度逐渐提升移过去,等等。

import {
  trigger,
  state,
  style,
  animate,
  transition,
  // ...
} from '@angular/animations';



2.2、定义触发条件(trigger)

关于动画的部分都是定义在@Component注解中,我新建一个Component来写示例代码ng g component open-close

定义一个trigger,里面是动画的所有细节,同时我们需要为这个trigger命名,名字必须是驼峰或者中间用破折号隔开,比如backgroundColor或者background-Color

命名是需要和元素绑定,元素会通过名字知道需要执行什么动画。

可以看下面这个示例,命名了一个动画叫openClose,动画细节代码暂时省略。

@Component({
  selector: 'app-open-close',
  templateUrl: './open-close.component.html',
  styleUrls: ['./open-close.component.css'],
  animations: [
    trigger('openClose', [
      // ...
    ]),
  ]
})
export class OpenCloseComponent implements OnInit {
// ···
}

2.3、定义状态(state)

很多动画都可以看成从一个状态到另一个状态,或者说从状态1到状态2再到状态3,总之最小可以拆分成两个状态的变化。

比如从A点移到B点,高度从400缩小到300,从紫色变成红色等等都属于状态变化,当然这些可以一起发生。

在本示例中,div的高度将缩小,并且从黄色变成紫色;也会反过来。

所以下面的代码在trigger中定义两个状态,分别命名为openclose。其中也描述了两个状态的style。

@Component({
  selector: 'app-open-close',
  templateUrl: './open-close.component.html',
  styleUrls: ['./open-close.component.css'],
  animations: [
    trigger('openClose', [
      state('open', style({
        height: '200px',
        opacity: 1,
        backgroundColor: 'yellow'
      state('closed', style({
        height: '100px',
        opacity: 0.8, 
        backgroundColor: 'blue'
      }))
    ]),
  ]
})
export class OpenCloseComponent implements OnInit {
// ...
}



2.4、定义过渡细节(transition)

光定义了状态还不够,因为动画需要平滑过渡才能有更好的用户体验。从状态1刷地一下直接变到状态2就感受不到动画效果,所以我们还需要定义过渡细节。

在下面的示例中,定义了两个过渡细节,一个是从open => closed,这个状态变化过程花费1s;另一个是从closed => open,花费0.5s。

@Component({
  selector: 'app-open-close',
  templateUrl: './open-close.component.html',
  styleUrls: ['./open-close.component.css'],
  animations: [
    trigger('openClose', [
      // ...
      state('open', style({
        height: '200px',
        opacity: 1,
        backgroundColor: 'yellow'
      })),
      state('closed', style({
        height: '100px',
        opacity: 0.8, 
        backgroundColor: 'blue'
      })),
      transition('open => closed', [
        animate('1s')
      ]),
      transition('closed => open', [
        animate('0.5s')
      ]),
    ]),
  ]
})
export class OpenCloseComponent implements OnInit {
// ...
}

2.5、动画绑定元素

我们可以在元素的属性中加上[@triggerName]="expression? state1: state2"

其中triggerName就是之前定义的trigger,这里应该写成[@openTrigger]

等号后面的表达式则是决定元素的状态变化。在这个示例中是通过按钮实现状态转变。

之前我们定义了动画的两个状态,分别叫openclosed,点击按钮,状态从open转到closed;再点击按钮,状态从closed转到open

所以这里的expression可以写成[@openClose]="isOpen ? 'open' : 'closed'" ,其中isOpen是变量,可以通过按钮点击事件改编。

下面是html的代码

<nav>
    <button type="button" (click)="toggle()">Toggle Open/Close</button>
</nav>

<div [@openClose]="isOpen ? 'open' : 'closed'" class="open-close-container">
	<p>The box is now {{ isOpen ? 'Open' : 'Closed' }}!</p>
</div>

在这里插入图片描述

下面是完整的ts代码。

import { animate, state, style, transition, trigger } from '@angular/animations';
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-open-close',
  templateUrl: './open-close.component.html',
  styleUrls: ['./open-close.component.css'],
  animations: [
    trigger('openClose', [
      // ...
      state('open', style({
        height: '200px',
        opacity: 1,
        backgroundColor: 'yellow'
      })),
      state('closed', style({
        height: '100px',
        opacity: 0.8, 
        backgroundColor: 'blue'
      })),
      transition('open => closed', [
        animate('1s')
      ]),
      transition('closed => open', [
        animate('0.5s')
      ]),
    ]),
  ]
})
export class OpenCloseComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
  }

  isOpen = true;

  toggle() {
    this.isOpen = !this.isOpen;
  }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/586943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python中如何排序

Python中如何排序 Python是一门功能强大的编程语言&#xff0c;拥有丰富的库和模块来满足各种需求。在Python中&#xff0c;排序是一项常见的任务&#xff0c;它可以帮助我们对数据进行整理和分析。本文将介绍Python中如何排序&#xff0c;包括排序算法和相关的库函数。 排序…

SysInfo(电脑系统信息)0.0.0.1beta2

文件说明符 : D:\masm32\wmi\sysInfo\sysInfo0.0.0.1beta2.exe 属性 : A--- 数字签名:否 PE文件:是 语言 : 中文(简体&#xff0c;中国) 文件版本 : 0.0.0001 beta2 说明 : 电脑系统信息 版权 : PurpleEndurer 产品版本 : 0.0.0001 beta2 产品名称 : 电脑系统信息 公司名称 : P…

oracle--常用维护语句

1、sqlpus 连接 [rootdb-server ~]$su - oracle ##切换oracle用户 [oracledb-server ~]$ sqlplus /nolog ##启动客户端进程 SQL>conn zyl/zyl2022 ##普通用户登录 SQL>conn / as sysdba ##管理员登录 Connected. SQL> 2、启动或关闭数据库 SQL>startup…

【项目实战】三维重建:基于RGB-D数据集的TSDF算法

文章目录 一、项目简介二、算法原理2.1、每个体素都有两个值&#xff1a;TSDF值&#xff08;用于生成重建表面&#xff09;、RGB灰度值&#xff08;给重建表面贴上彩色纹理&#xff09;2.2、TSDF算法步骤一&#xff1a;体素体建立步骤二&#xff1a;划分网格&#xff08;体素化…

2023-05-30 Unity 2进制6——Excel写入器ExcelWriter

文章目录 一、Epplus 使用二、ExcelWriter&#xff08;一&#xff09;文件结构&#xff08;二&#xff09;操作说明&#xff08;三&#xff09;操作示例&#xff08;四&#xff09;完整代码 一、Epplus 使用 &#xff08;一&#xff09;获取 Excel 文件 string filePath App…

一图看懂 autopep8 模块:自动格式化Python代码,以使其符合PEP8规范,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 autopep8 模块&#xff1a;自动格式化Python代码,以使其符合PEP8规范&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&#…

2022年软件测试人员调查统计

1、软件测试从业人员的年龄分布 测试行业的主力军年龄分布主要是集中在 26-30 岁这个区间&#xff0c;这部分的群体承担着行 业发展的主导力量&#xff0c;占 43.2%。根据数据显示&#xff0c;被调查者中占比最多的是 26-30 岁区间的软件测试从业人员&#xff0c;26-30 岁的测试…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(二)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

Leetcode 2455 可被三整除的偶数的平均值

Leetcode 2455 可被三整除的偶数的平均值 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/average-value-of-even-numbers-that-are-divisible-by-three/description/ 博主Github&#xff1a;https://github.com/GDUT-…

Paper:《Is GPT-4 a Good Data Analyst?GPT-4是一个好的数据分析师吗?》翻译与解读

Paper&#xff1a;《Is GPT-4 a Good Data Analyst?GPT-4是一个好的数据分析师吗&#xff1f;》翻译与解读 导读&#xff1a;该论文提出了一个框架&#xff0c;用来引导GPT-4进行端到端的数据分析任务&#xff0c;包括数据提取、可视化生成以及数据分析。GPT-4 能生成SQL查询来…

chatgpt赋能python:Python中的切片操作

Python中的切片操作 介绍 在Python中&#xff0c;切片操作是一种常用的操作方式&#xff0c;可以快速地获取列表、元组、字符串等类型的一部分数据。切片操作通常使用冒号来表示&#xff0c;其形式为[start:stop:step]&#xff0c;其中start是起始位置,stop是结束位置(不包含…

编译型语言和解释型语言的定义与区别

目录 编译型语言 1) 可执行程序不能跨平台 2) 源代码不能跨平台 解释型语言 关于Python 总结 通过高级语言编写的源码&#xff0c;我们能够轻松理解&#xff0c;但对于计算机来说&#xff0c;它只认识二进制指令&#xff0c;源码就是天书&#xff0c;根本无法识别。源码要…

redhat7多种服务配置(Telnet/VNC/FTP/HTTP/Samba)

老师布置的作业,然后就是配置成功了,像重新配置一遍,也对此总结一下. 链接是参考&#xff0c;可以不用看&#xff0c;直接从我写的主体部分开始&#xff0c;要输入的命令我都有标注&#xff0c;没标注的都是说明&#xff0c;不用从链接里面开始哈!!!! 假设我们一直把yum配置好…

SQL server入门一【简单介绍与简单建表】

SQLserver登录方式 Windows身份验证 用户名登录 通常登录名为sa&#xff0c;密码为下载时设置的密码 SQL server建立一个数据库 数据库中建表存储数据(输入命令建表) 数据库的简单介绍与概念 含义 可以对数据进行存储和管理的软件以及数据本身统称为数据库 组成 数据库由表…

chatgpt赋能python:Python中安装re模块–详细介绍与步骤

Python中安装re模块 – 详细介绍与步骤 Python中的re模块是一种强大的正则表达式工具&#xff0c;它可以让我们快速方便地进行字符串的匹配和查找。在Python中安装re模块非常简单&#xff0c;本文将为大家详细介绍安装步骤。 什么是re模块 re模块是Python中的正则表达式模块…

Vue实例

1. 自定义元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

SocketTools .NET Edition 11.0 Crack

SocketTools .NET Edition 一套 .NET 类&#xff0c;可轻松向软件添加 Internet 功能&#xff0c;支持 .NET 4.0 至 .NET 8.0。 特征 SocketTools 提供入门所需的一切&#xff0c;包括文档和示例&#xff0c;以及免费技术支持来回答您的开发问题。 Visual Studio 2022 和 .NE…

nodejs基于vue的医院在线挂号系统

本设计是在win10操作系统环境下&#xff0c;采取nodejs作为主要编程环境&#xff0c;通过nodejs语言使用sxpress框架&#xff0c;实现医院预约挂号系统。首先用户需要选定一个医生进行预约&#xff0c;医生可以通过预约&#xff0c;这里涉及到用户到医生的数据传输&#xff0c;…

软考A计划-试题模拟含答案解析-卷十

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

网络犯罪宣传通告系统的设计与实现

摘要&#xff1a;在这个科技迅速发展的时代&#xff0c;我们迎来了互联网的时期&#xff0c;它使我们人类的生活变的更方便更快捷&#xff0c;但是它也带来了很多安全隐患。正视网络犯罪&#xff0c;正确去处理它&#xff0c;用有效的措施去预防犯罪去宣传网络犯罪的危害&#…