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 相关文章推荐
用jscript实现新建和保存一个word文档
Jun 15 Javascript
手把手教你自己写一个js表单验证框架的方法
Sep 14 Javascript
js带按钮的提示框可供选择示例代码
Sep 17 Javascript
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
Dec 14 Javascript
jQuery获得内容和属性示例代码
Jan 16 Javascript
Node.js与PHP、Python的字符处理性能对比
Jul 06 Javascript
jquery对复选框(checkbox)的操作汇总
Jan 13 Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 Javascript
微信小程序分享海报生成的实现方法
Dec 10 Javascript
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
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
pandas通过loc生成新的列方法
2018/11/28 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Python内置异常类型全面汇总
2020/05/28 Python
python的launcher用法知识点总结
2020/08/07 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
大学毕业登记表自我鉴定
2013/10/09 职场文书
大学生村官工作感言
2014/01/10 职场文书
表彰先进集体通报
2014/01/12 职场文书
给护士表扬信
2014/01/19 职场文书
中学生打架检讨书
2014/02/10 职场文书
行政专员求职信范文
2014/05/03 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
超市店长竞聘书
2015/09/15 职场文书