Angular4.0动画操作实例详解


Posted in Javascript onMay 10, 2019

本文实例讲述了Angular4.0动画操作。分享给大家供大家参考,具体如下:

粗略的记录一下angular4的动画

先看一下angular中文网关于这个给的例子。

有两个组件home,about。 路径配置什么的这里就不细说了,之前的博文有说过,我就贴一下代码,很好理解的,

需要import的东西我先说一下,我只贴了使用动画要用的东西,其他的我省略了,

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
@NgModule({
  ...
 imports: [
 BrowserModule,
 BrowserAnimationsModule,
 AppRouting
 ],
 ...
})

在这个简单的例子里我要对app.component.html里的内容进行animate,所以我的

app.component.ts

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css'],
 animations: [] // 这里代码我省略了,先说一下结构,后面说具体实现。
})

以上就是需要写动画实现的基本结构,下面贴实现这个例子的代码。为了方便阅读,我把代码解释就贴在代码旁边

例一:

这是路由配置:

import {RouterModule, Routes} from '@angular/router';
import {HomeComponent} from "./home/home.component";
import {AboutComponent} from "./about/about.component";
const routes: Routes = [
 { path: '', redirectTo: 'home', pathMatch: 'full' },
 { path: 'home', component: HomeComponent, data: { state: 'home' } },
 { path: 'about', component: AboutComponent, data: { state: 'about' } }
];
export const AppRouting = RouterModule.forRoot(routes, {
 useHash: true
});

app.component.html

<nav>
 <a routerLink="home" routerLinkActive="active">Home</a>
 <a routerLink="about" routerLinkActive="active">About</a>
</nav>
<main [@routerTransition] = "gg(o)">
 <router-outlet #o="outlet"></router-outlet>
</main>
<div [@queryAnimation]="goAnimate()">
 <div class="content">
 Blah blah blah
 </div>
 <h1>Title</h1>
</div>
 <!-- 
 [@routerTransition]="gg(o)" ,api:transition declares the sequence of animation steps that will be run when the provided stateChangeExpr value is satisfied. stateChangeExpr即等号左边即动画名称,注意中括号和@符不能省略,等号右边是一个函数,也可以是变量,满足条件便可以让动画进行,一个动画可以多次使用 
 -->

app.component.ts

import { Component } from '@angular/core';
import {routerTransition} from './router.animation';
import {animate, group, query, stagger, style, transition, trigger} from "@angular/animations";
@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css'],
 animations: [
 trigger('routerTransition', [ // 第一个参数是动画名称 stateChangeExpr
  transition('* <=> *', [ // 指定什么时候执行动画,状态的来源可以是简单的对象属性,也可以是由方法计算出来的值。重点是,我们得能从组件模板中读取它。官网上有提供一些通配符,[传送门](https://angular.cn/api/animations/transition)
  query(':enter, :leave', style({ position: 'fixed', width: '100%' }), { optional: true }),
  query('.block', style({ opacity: 0 }), { optional: true }),
  group([ // block executes in parallel
      query(':enter', [style({ transform: 'translateX(100%)' }),
      animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))], { optional: true }),
      query(':leave', [style({ transform: 'translateX(0%)' }),
      animate('0.5s ease-in-out', style({ transform: 'translateX(-100%)' }))], { optional: true })
     ]),
   query(':enter .block', stagger(400, [style({ transform: 'translateY(100px)' }),
      animate('1s ease-in-out', style({ transform: 'translateY(0px)', opacity: 1 })),
    ]), { optional: true }),
  ])
 ]),
]
})
export class AppComponent {
 public exp = '';
 gg(outlet) { // 传递进入的组件的信息
 console.log(outlet.activatedRouteData.state);
 return outlet.activatedRouteData.state;
 }
}

效果动图在最后。

比对着官网给的API,总结一下动画部分~

我是按自己的理解说的,有不对的地方还请多多指教,共勉!O(∩_∩)O~

  • stateChangeExpr

即动画名称,它的属性值可以是字符串也可以是函数,若是函数,则每次状态发生改变都会重新执行,若函数返回true,则对应的动画就会执行。

Angular4.0动画操作实例详解

  • transition

它里面的动画只在满足条件时执行,过了这个点它就变回原始样式了,

  • state

可以保持动画样式

  • :enter 、 :leave

即对应void => * 、 * => void 状态

例子二

app.component.html

<div [@queryAnimation]="goAnimate()">
 <h1>Title</h1>
 <div class="content">
 Blah blah blah
 </div>
</div>

app.component.ts

import { Component } from '@angular/core';
import {animate, group, query, stagger, state, style, transition, trigger} from "@angular/animations";
@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css'],
 animations: [
 trigger('queryAnimation', [
  transition('* => *', [
   query('h1', style({ opacity: 0 , color: 'red'})),
   query('.content', style({ opacity: 0, color: 'green', width: '100px', height: '100px', border: '1px solid red' })),
   query('h1', animate(1000, style({ opacity: 1, color: ' blue' }))),
   query('.content', animate(1000, style({ opacity: 1, width: '50px', height: '100px', border: '10px solid green'})),
    {optional: true}),
 ]),
  transition(':leave', [
  style({color: 'pink'}),
  animate(2000)
  ])
]),
]
})
export class AppComponent {
 public gg: string;
 constructor() {
 }
 goAnimate() {
 return true;
 }
}

Angular4.0动画操作实例详解

这个gif有点卡,但是可以大概看出路由切换时是有动画的。这是上面两个例子的效果图

state只能放在trigger里,不能搁在transition里

目前就这么点,才看了一点,以后慢慢补充~~~

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
JavaScript-世界上误解最深的语言分析
Aug 12 Javascript
javascript引用对象的方法代码
Aug 13 Javascript
javascript中删除指定数组中指定的元素的代码
Feb 12 Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
javaScript中with函数用法实例分析
Jun 08 Javascript
JS实现复制内容到剪贴板功能
Feb 05 Javascript
手把手教你搭建ES6的开发运行环境
Jul 11 Javascript
Bootstrap Table 删除和批量删除
Sep 22 Javascript
Vue插值、表达式、分隔符、指令知识小结
Oct 12 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
Angular 2使用路由自定义弹出组件toast操作示例
May 10 #Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
May 10 #Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
May 10 #Javascript
Vue项目中配置pug解析支持
May 10 #Javascript
Angular2实现的秒表及改良版示例
May 10 #Javascript
node中IO以及定时器优先级详解
May 10 #Javascript
使用Node.js写一个代码生成器的方法步骤
May 10 #Javascript
You might like
Get或Post提交值的非法数据处理
2006/10/09 PHP
浅析PHP绘图技术
2013/07/03 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
JavaScript 基础问答三
2008/12/03 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
innerText 使用示例
2014/01/23 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
vue组件的写法汇总
2018/04/12 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
netbeans7安装python插件的方法图解
2013/12/24 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
Python AES加密实例解析
2018/01/18 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
python实现xml转json文件的示例代码
2020/12/30 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
教师党的群众路线对照检查材料
2014/09/24 职场文书
优秀员工推荐材料
2014/12/20 职场文书
车辆挂靠协议书
2016/03/23 职场文书