angular2的动画

谈起angular2(现在已经angular4)了,个人觉得angular2的官方文档不适合初学者(真心吐槽..),所以每一块弄懂都不那么容易。

为了弄懂angular的动画自己也是花了好一番功夫的,不客观的说,angular的动画写起来是有些复杂的,但又必须掌握。

好了,废话不多说,开始正文吧。

1:angular动画的使用需要先引入一些与动画有关的函数。

import { NgModule } from ‘@angular/core‘;
import { BrowserModule } from ‘@angular/platform-browser‘;
import { BrowserAnimationsModule } from ‘@angular/platform-browser/animations‘;

  组件里引用:(:暂时先在组件里写动画相关的代码,文末会把它单独抽离出来)

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

注:有些小伙伴的项目开始的时候可能没有动画相应的资源包,请暂时允许我这么说。此时你的就需要在项目依赖包里先加入这个资源。

好了,定位到你的项目上,命令行输入:

npm install @angular/animations --save

当你检查到你的package.json里出现:

此时说明动画资源已经被成功下载了。ok,现在我们开始动画吧:

********:开始第一个动画(交通信号灯..):

1:请首先在你的组件.ts代码里的@Component的元数据里添加如下代码:

animations: [
    trigger(‘signal‘, [
      state(‘go‘, style({
        ‘background-color‘: ‘green‘
      }))
    ])
  ]

模板(html)里添加:

<div class="traffic-light" [@signal]="‘go‘"></div>

css里样式:

.traffic-light{  width: 100px;  height: 100px;  background-color: black;  }

本来div定义的样式背景色是黑色,但是div在页面中却呈现的是绿色,见图:

现在问题来了,绿色怎么来的呢 ? 见图:

因为div元素此时处于动画里的go状态。所以div具有go状态里被描述的动画样式。

如果暂时你不懂为什么要这样定义动画,此时你只需要知道这样写就行了。

2:让我们加入两个按钮,此时两个按钮要做的是:让div元素切换不同的背景色。

此时可能有的小伙伴会觉得我直接用js写不就好了吗?请先务着急,不妨先看看利用动画如何制作。(下面用原生js仅为提供意思,

btn1.onclick = function(){
    div.style.background = ‘xxx‘;
}

btn2.onclick = function(){
    div.style.background = ‘xxx‘;
}

利用动画方式:

见模板:图

见ts:图

这个切换div不同背景颜色样式上,实质的就是通过按钮事件切换div的两种动画状态。

3:让我们来点复杂一点的:(:   见图:

这个具备时间过渡的动画的怎么来的呢?见代码:

在ts代码里我只加了三句代码,其中两句是描述状态中高度的变化,相信小伙伴们都懂,着重看看这个  ‘* => *’

问题来了,这个 * = >* 是个什么东西呢?

答:它是一个状态迁移表达式,* 表示任意状态,所以这个表达式告诉我们,只要有状态的变化就会激发后面的动画效果,使得元素做500毫秒的动画。

也可以粗暴的这么讲:*号匹配任意状态,由 transition 关键字定义 何种状态过渡到何种状态。 只要状态发生变化,就会执行 transition 里的anmate。

它类似于:

但不同的是,当第一次点击的是stop的按钮时,这么div是没有出现时间过渡的。那是因为go状态在stop之前定义,

先点击stop时,不走transition这条定义。当点了go按钮触发go状态时,stop的过渡才生效。

4:然后介绍一下一个特殊的状态void, 何为void状态呢,我们先添加一段代码,见下图代码:

然后我们再看一下效果:

我们会看见当页面刷新的时候,div元素从页面上方进入页面。这个动画如何产生的呢?再重复看这两张代码图:

我们会发现,在组件中并没有给signal赋初始值,这就意味着一开始trigger的状态就是void。

我们往往在实现进场或离场动画时需要这个void状态。void状态就是描述没有状态值时的状态。

当然,void状态也是一种任意状态。所以:

transition(‘*=> *‘, animate(500))   

//等同于

transition(‘void => *‘, animate(500))   
(未完待续..如有错误,欢迎指正。
时间: 2024-11-05 14:57:31

angular2的动画的相关文章

angular2项目关于动画的处理

animations动画在angular2官网里面已经讲解很详细了,那么动画功能在实际项目中应该如何组织文件,动画文件放在哪个位置,如何来组织结构使得动画模块和其他模块之间运作调理清晰呢,下面参照NiceFish来讲解一下:  一:定义动画 在app文件夹里面有一个专门的动画模块 拿一个例子来简单分析一下: import { trigger, state, style, transition, animate, keyframes } from '@angular/animations'; ex

angular2 学习笔记 ( animation 动画 )

refer : https://angular.io/guide/animations https://github.com/angular/angular/blob/master/packages/animations/src/animation_metadata.ts https://github.com/angular/angular/commit/f1a9e3c (router) angular 的动画建立在一堆的方法上: 1. trigger 触发器, 用来和 dom 交互 <div

从Angular2路由引发的前后端路由浅谈

笔者的学习进度比较慢,直到两年以前写的网站都还是以服务端为主导的,即网站的所有视图都由服务器视图模板来渲染,笔者使用的是 DotNet MVC,开发套路就是在Controller里面写Action,在Views里写对应的Action.cshtml,使用ajax发起请求已经是比较前端的事情了.这种时候由于DotNet MVC框架继承的微软风格的懒人模式,甚至不需要去知道其路由是如何实现的,给人一种感觉是只要在浏览器里敲进去Controller名与Action名,就访问到视图了. 后来笔者开始使用n

一张图告诉你angular2所有知识点

忙活了半年,从angular2.0到现在angular4.2.从没AOT到有AOT.我想说,angular2的学习曲线真的有点陡峭.只能说,angular2是一个比较完整的框架,框架就是这样,一大堆条条框框,一个项目大了,就是靠这些条条框框来保持秩序. 关于之前的H5编辑器,很多人私信我,要么就是商业合作,要么就是要源码.我只想说,虽然那个编辑器是一个人搞的,但是,那时候我只是个打工的,也签了保密协议,爱莫能助.法律问题,本人不大懂,若是新写一个不会违法,我可以业余时间搞一个.违法就算了,等保密

(三) Angular2项目框架搭建心得

前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2.*版本的面目全非,不过宽容点来看这个强大的框架,升级到ng2肯定是一件好事情,虽然截至目前ng2还存在或多或少需要完善的地方,但是ng2做到了留下并强化ng1好的部分,移除或改善其不好的部分,并且基于许多较新Web技术来开发,不去看从ng1迁移到ng2的门槛和工作量的话,ng2的编程体验是很酷炫的. 目前n

Angular2正式版发布,Wijmo抢先支持

Angular2正式版发布 9月15日,Angular 2 的最终版正式发布了.作为 Angular 1 的全平台继任者 -- Angular 2 的最终版,意味着什么? 意味着稳定性已经得到了大范围用例的验证: 意味着已经针对产品化.文件尺寸和性能,进行了优化: 意味着已经可以借助预编译技术和内置的延迟加载机制了,这些可以确保能发布出最快.最小的应用,并且横跨浏览器.桌面和移动平台: 意味着为开发人员准备的 Angular CLI 和风格指南得到了大幅增强. Angular 1 的发布为新兴的

Angular2 小贴士 RouterLink 导航

AngularJS的路由一直是学习的一大难点,我们只能边看边学边掌握,边看边学边推翻.今天我们来看一下在angular2中通过routerLink实现导航的几种方式,以及各自的优缺点. Angular2的路由模块来自@angular/router,这不包含在angular2的核心模块中.所以如果我们想要学习angular2的路由功能,必须导入该模块. 我们自己的最佳实践就是不断的推翻自己的过程,痛苦并痛苦着. 我自己总结的几种导航方式: 1 <a routerLink='/dashboard/h

Vue, React, AngularJS, and Angular2. 我们对流行JavaScript框架们的选择

2017-08-04 前端大全 (点击上方公众号,可快速关注) 英文:ANTONI ZOLCIAK  译文:众成翻译 www.zcfy.cc/article/vue-react-angularjs-and-angular2-our-take-on-popular-javascript-frameworks-3668.html 如有好文章投稿,请点击 → 这里了解详情 一个有趣的事实是:IBM发表的2017年最值得学习的编程语言名单中,JavaScript榜上有名.这位IT巨头指出,JS在网站中惊

Angular2 VS Angular4 深度对比:特性、性能

在Web应用开发领域,Angular被认为是最好的开源JavaScript框架之一. Google的Angular团队已于3月23日发布了Angular4,而期待已久的Angular2版本则是之前版本的完全重构. 对于成熟的开发人员来说,有以上两种选择是一件很棒的事情:但是,对于处于学习阶段的新晋开发人员来说,可能有点不知如何选择. 那么,本文将会对Angular2和Angular4进行深度对比,以便帮助大家更好的了解这两个版本. Angular2 Angular2是在2015年底发布的.接下来