angular4 如何在全局设置路由跳转动画的方法


Posted in Javascript onAugust 30, 2017

最近用angular4写项目需要为每次路由跳转增加动画,看了一下官方文档,虽然可以实现,但是要每个组件都引入一次animations,比较麻烦,找网上也查阅了很多资料,但是都没找到适用的方法,最后自己写了一种方法如下:

首先在app.module中导入BrowserAnimationsModule

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
 imports: [
  BrowserAnimationsModule

在根目录src/app/下创建一个animations.ts。内容如下,这里我用到query和group是想两个页面来回切换有过度痕迹

import { AnimationEntryMetadata, state } from '@angular/core';
import { trigger, transition, animate, style, query, group } from '\@angular/animations';

export const routeAnimation: AnimationEntryMetadata =
 trigger('routeAnimation', [
  transition(':enter', [
   style({
    position: 'absolute'
   }),
   animate('0.5s ease-in-out')
  ]),
  transition('* => *', [
   query(':leave', style({ transform: 'translateX(0)', position: 'absolute'}), { optional: true }),
   query(':enter', style({ transform: 'translateX(100%)', position: 'absolute'}), { optional: true }),

   group([
    query(':leave', animate('.5s ease-in-out', style({transform: 'translateX(-100%)'})), { optional: true }),
    query(':enter', animate('.5s ease-in-out', style({transform: 'translateX(0)'})), { optional: true })
   ])
  ])
 ]);

接着在app.component中使用 NavigationEnd 设置每次路由跳转监听的参数变化并且引入animations模块

import { Router, NavigationEnd } from '@angular/router';
import { routeAnimation } from './animations';

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.less'],
 animations: [routeAnimation]
})
// router跳转动画所需参数
 routerState: boolean = true;
 routerStateCode: string = 'active';

this.router.events.subscribe(event => {
   if (event instanceof NavigationEnd) {
    // 每次路由跳转改变状态
   this.routerState = !this.routerState;
   this.routerStateCode = this.routerState ? 'active' : 'inactive';
   }
  });

最后在app.component.html中声明路由动画就可以了

<div id="app" [@routeAnimation]="routerStateCode">
 <router-outlet></router-outlet>
</div>

现在全局路由跳转都有动画了,不用一个一个组件导入animations。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery-Tools-overlay 使用介绍
Jul 14 Javascript
jquery 简单应用示例总结
Aug 09 Javascript
js history对象简单实现返回和前进
Oct 30 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
Jan 09 Javascript
简介JavaScript中toUpperCase()方法的使用
Jun 06 Javascript
js显示动态时间的方法详解
Aug 20 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
Sep 20 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
Oct 30 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
Nov 18 Javascript
微信小程序select下拉框实现源码
Nov 08 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
Sep 21 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
Aug 30 #Javascript
如何理解Vue的render函数的具体用法
Aug 30 #Javascript
微信小程序之发送短信倒计时功能
Aug 30 #Javascript
使用node.js对音视频文件加密的实例代码
Aug 30 #Javascript
hammer.js实现图片手势放大效果
Aug 29 #Javascript
js禁止表单重复提交
Aug 29 #Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 #Javascript
You might like
php 缓存函数代码
2008/08/27 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHP实现递归的三种方法
2020/07/04 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
详细讲解Python中的文件I/O操作
2015/05/24 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
Tensorflow 实现释放内存
2020/02/03 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
在求职信中如何凸显个人优势
2013/10/30 职场文书
化工专业求职信
2014/07/01 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
导游词之上海豫园
2019/10/24 职场文书
python可视化大屏库big_screen示例详解
2021/11/23 Python
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL