Angular练习之animations动画二

2023-11-13

返回目录

回顾

文章基于angular的练手项目。文章目录
前一篇文章《Angular练习之animations动画》介绍了在angular中使用动画的基本方法。

引入动画模块>创建动画对象>在动画载体上使用。我觉得其核心的内容在创建动画对象上,今天我们就来练习创建不同的动画对象trigger

预览

开始练习

创建例子2

ng g component my-animations/exp2

布局

<h1>动画实例2</h1>
<div>
  <button (click)="changState('left')">状态变成左</button>
  <button (click)="changState('right')">状态变成右</button>
  <button (click)="changState('')">状态为空</button>
  <button (click)="changState('center')">状态为中</button>
</div>
<br>
<div style="height: 100px;width: 100px;background-color: black" [@box]="boxState"></div>

ts

import { Component, OnInit } from '@angular/core';
import {boxAnimate2} from "../animations"
@Component({
  selector: 'app-exp2',
  templateUrl: './exp2.component.html',
  animations: [
    boxAnimate2
  ]
})
export class Exp2Component implements OnInit {
  // 状态
  private boxState='';
  constructor() { }

  ngOnInit() {
  }
  changState(state){
    this.boxState = state;
  }
}

写动画效果,只定义状态。

如下只写两个状态看看效果。

// 定义一个动画,左右两个状态加上颜色变化更容易理解吧
export const boxAnimate2 = trigger('box', [
  // 定义一个状态left
  state('left', style({ transform: 'translate3d(0,0,0)',background:'red' })),
  // 定义另外一个状态right
  state('right', style({ transform: 'translate3d(200%,0,0)',background:'blue' })),
]);

可以看出没有动画效果,只是单纯的样式改变。

添加任意动画过程transition

  // 定义运动过程(从任意到任意)
  transition('* => *', animate(500)),

可以看出有动画效果了

入场动画void => *

注意定义顺序,定义的顺序换下位置,可以尝试下效果。我就不演示了

  // 入场动画
  transition("void => *", [
    style({ opacity: 0,transform: 'translate3d(200%,200%,0)'}),
    animate(500)
  ]),
  // 定义运动过程(从任意到任意)
  transition('* => *', animate(500)),

定义的顺序很总要

":enter"和":leave"

对于"void => *"官方还给出另一种写法":enter"。同时也有相反效果的":leave"

我们添加一个按钮,修改布局如下:

<button (click)="changShow()">显示/隐藏</button>

<div *ngIf="show" style="height: 100px;width: 100px;background-color: black" [@box]="boxState"></div>

ts

  private show= false;
  changShow(){
    this.show=!this.show;
  }

效果不错哦

修改动画效果

  //入场动画
  transition(":enter", [
    style({ opacity: 0,transform: 'translate3d(200%,200%,0)'}),
    animate(500)
  ]),
  // 出场动画
  transition(":leave", [
    style({ opacity: 1}),
    animate(500, style({ opacity: 0,transform: 'translate3d(200%,200%,0)'}))
  ]),

小结

在上面的动画定义中使用了style。且在两个不同的地方都定义了。这有什么作用呢,读者自己对比效果体会吧。

基于关键帧(Keyframes)的多阶段动画

通过定义动画的关键帧,可以把两组样式之间的简单转场,升级成一种更复杂的动画,它会在转场期间经历一个或多个中间样式。
每个关键帧都可以被指定一个偏移量,用来定义该关键帧将被用在动画期间的哪个时间点。偏移量是一个介于0(表示动画起点)和1(表示动画终点)之间的数组。

这里布局和ts代码我就跳过了。主要看transition的定义和效果

export const KeyframesAnimate = trigger('KeyframesAnimate',[
  //入场动画
  transition(":enter", [
    animate(500, keyframes([
      style({opacity: 0, transform: 'translate3d(-400%,0,0)', offset: 0}),
      style({opacity: 0.5, transform: 'translate3d(-150%,-50%,0)',  offset: 0.3}),
      style({opacity: 1, transform: 'translate3d(0,10%,0)',  offset: 0.7}),
      style({opacity: 1, transform: 'translate3d(0,0,0)',     offset: 1.0})
    ]))
  ]),
  // 出场动画
  transition(":leave", [
    animate(500, keyframes([
      style({opacity: 1, transform: 'translate3d(0,0,0)',     offset: 0}),
      style({opacity: 1, transform: 'translate3d(0,10%,0)', offset: 0.3}),
      style({opacity: 0.5, transform: 'translate3d(150%,-50%,0)',  offset: 0.7}),
      style({opacity: 0, transform: 'translate3d(400%,0,0)',  offset: 1.0})
    ]))
  ]),

]);

基于关键帧(Keyframes)的多阶段动画演示

并行动画组(Group)

export const GroupAnimate = trigger('GroupAnimate',[
  //入场动画
  transition(":enter", [
    style({ opacity: 0,width: '0px',height: '0px',transform: 'translateX(-200%)'}),
    group([
      animate('1s ease', style({transform: 'translateX(0)'})),
      animate('1s 200ms ease', style({width: '100px'})),
      animate('1s 200ms ease', style({height: '100px'})),
      animate('0.5s', style({opacity: 1})),
    ])
  ]),
]);

并行动画组(Group)演示

总结

  • 任意两个状态之间切换触发动画效果
  • 入场和出场
  • Keyframes实现串联动画
  • Group实现并行动画
  • 时间轴——等待100毫秒,然后运行200毫秒,并且带缓动:'0.2s 100ms ease-out'
  • 这个动画trigger是写在单独文件中的,作为一个变量导出的,我们是不是可以封装成一个npm包呢。

源码

源码放在github开源社区上面,随时会更新。所以你下载最新版本的时候会与该文章描述的略有差异。
github地址:https://github.com/yiershan/A...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular练习之animations动画二 的相关文章

随机推荐

  • OpenGL 7.测试框架,批渲染

    测试功能基类 本节搭建一个简单的测试框架 实现在窗口上显示一个菜单栏 点击不同的选项 进入不同的功能 附加目录中添加src 方便添加头文件 新建目录如下 测试基类 Test h 测试菜单TestMenu 用于管理所有的测试 pragma o
  • matlab 波形仿真,MATLAB仿真波形的处理

    MATLAB仿真波形的处理 由会员分享 可在线阅读 更多相关 MATLAB仿真波形的处理 14页珍藏版 请在人人文库网上搜索 1 示波器波形的处理1 示波器介绍首先介绍示波器的基本功能 对Simulink Model 搭建的模型 进行仿真之
  • C#知识系列:paritial class必须是同一个程序集,否则引用别的程序集的paritial class会报错

    C 知识系列 paritial class必须是同一个程序集 否则引用别的程序集的paritial class会报错 提示 A程序集的xxxx cs与B程序集的xxxx cs冲突 请使用A程序集的xxxx cs
  • RTK系列【1】小日子RTKLIB 2.4.3 b34 源码与算法研究(单点定位调试)

    小日子RTKLIB源码研究 1 VS2017下发现的一些bug 1 1 SPP 单点定位 1 1 1 问题描述 Run Time Check Failure 3 The variable dion is being used without
  • 客户下单软件

    一 订货系统后台能否通过手机进行操作 问 订货系统后台能否通过手机进行操作 我们购买订货系统后能不能通过手机操作订货企业后台 答 订货系统有手机版本和APP 可通过手机操作 二 订货系统企业后台能否及时了解到客户的欠款信息 小程序公司订单管
  • cocosCreator IOS 微信授权

    官方文档 iOS接入指南 微信开放文档 1 把你的项目构建ios版包 使用Xcode 打开 2 首先呢 我们进入微信开发者平台 选择到官方的ios 接入指南项 点击 资源下载页 下载 demo 然后把demo 中的SDKexport 文件直
  • 一起学nRF51xx 16 -  adc

    前言 nRF51的ADC设计得比较简单 它有几个可配置的部分 1 PSEL pinselection nRF51系列芯片有8个模拟输入通道 并且这几个脚是固定的 不能像GPIO那样可以重新映射 PSEL用来选择需要采集模拟电压的通道 当该通
  • C语言实现动态通讯录(附带文件保存)

    作者简介 嵌入式入坑者 与大家一起加油 希望文章能够帮助各位 个人主页 rivencode的个人主页 系列专栏 玩转C语言 推荐一款模拟面试 刷题神器 从基础到大厂面试题 点击跳转刷题网站进行注册学习 C语言实现动态通讯录 一 动态通讯录的
  • 「第五篇」全国电子设计竞赛-电源题设计方案总结

    点击上方 大鱼机器人 选择 置顶 星标公众号 福利干货 第一时间送达 0 前言 许多朋友给我留言说 有没有电源题目的一些文章可以参考 为了给大家找更多的关于电赛相关的经验贴 我在网上疯狂游泳 不断筛选 终于在知乎上看到一位优秀的大佬 刘阳
  • 新一代MacBook Pro外观、屏幕、性能全面升级

    去年十一月 苹果正式推出了搭载M1自研处理器的MacBook Pro 13 3 M1设备的的出色性能饱受消费者赞赏 有业内人士称 苹果将会在近两年的时间将自家的PC产品全部更换为自研处理器 近日 就有媒体曝光了一款2021款MacBook
  • Ubuntu—vi编辑器的使用一

    vi编辑器 vi是Linux中最基本的编辑器 但vi编辑器在系统管理 服务器配置工作中永远都是无可替代的 vi编辑器的使用 vi有以下三种模式 命令行模式 用户在用vi编辑文件时 最初进入的是该模式 可以进行复制 粘贴等操作 插入模式 进行
  • Python 将CSV文件数据存入Mysql数据库

    我们有一个名为student csv的文件 里面包含有学生的学号 姓名 性别等信息 想要基于Python将CSV文件中的信息写入MySQL数据库的student info表中 下面给出具体实现代码 首先引入所需要的库 import pand
  • Linux下Git安装、配置及使用

    文章目录 1 Git的安装 2 Git的配置 3 Git的使用 之前写过一篇文章是关于如何在Windows下使用Git 详见 Git及TortoiseGit安装 配置及使用 下面记录一下我在Ubuntu下使用版本控制工具Git的过程 1 G
  • 谷歌的AI芯片设计

    机器学习最近经常出现在新闻中 一些早期的炒作已经平息 但 这种趋势仍然存在 现在它已经真正开始在芯片设计界掀起波澜 芯片设计中的机器学习和人工智能是一个如此庞大的领域 我开始迷失在所有的研究中 所以我想进入芯片设计领域的最新突破 平面规划
  • 什么是即时通讯?即时通讯的发展

    一 即时通讯是什么 即时通讯是通过技术来体现在线聊天 交流的软件 有两种架构 一种是C S架构 采用客户端 服务器形式 用户使用过程中需要下载安装客户端软件 比如 微信 QQ 陌陌 钉钉 企业微信 飞书等等通讯软件 采用B S架构 浏览器
  • 小智AI ChatGPT的优点和局限性:

    自然度高 ChatGPT能够生成非常自然的语言 让用户感觉像是在和一个真实的人进行交流 多功能性 ChatGPT可以用于很多不同的场景 比如智能客服 聊天机器人 文本生成 语音合成等等 知识储备 ChatGPT在其训练过程中已经接触到了大量
  • 1024程序员节,庆祝上海csdn嘉年华的圆满结束,也庆祝CDC的诞生,也很开心看到理智偶像三太子傲丙

    前言 1024程序员节 庆祝10月23号 上海csdn嘉年华的圆满结束 也庆祝CDC的诞生 也很开心看到理智偶像三太子傲丙 哦耶 1 现场签到 2 很幸运能拿到csdn的嘉宾证 并参与这次嘉年华活动 3 收到了官方给我们的小礼物 很开心 也
  • 无显卡也能AI作画

    经典碎碎念 事情起因是这样的 我之前写了如何在linux上用Stable Diffusion WebUI 里边提到我迟迟没有弄webui是因为我笔记本A卡 台式机显卡带不动 所以无奈只能使用学校服务器搭一个 当时有人说我 你自己电脑不行怎么
  • 基于GEE平台的植被覆盖度(FVC)像元二分法计算

    一 植被覆盖度计算方法 植被覆盖度FVC Fractional Vegetation Cover 定义为单位面积内绿色植被冠层垂直投影面积所占比例 FVC是衡量地表植被状况的重要指标之一 也是区域生态系统环境变化的重要指示 对水文 生态 区
  • Angular练习之animations动画二

    返回目录 回顾 文章基于angular的练手项目 文章目录前一篇文章 Angular练习之animations动画 介绍了在angular中使用动画的基本方法 引入动画模块 gt 创建动画对象 gt 在动画载体上使用 我觉得其核心的内容在创