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 相关文章推荐
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
Apr 20 Javascript
JavaScript下利用fso判断文件是否存在的代码
Dec 11 Javascript
jQuery读取和设定KindEditor值的方法
Nov 22 Javascript
javascript中的return和闭包函数浅析
Jun 06 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
Mar 13 Javascript
深入浅析同源策略和跨域访问
Nov 26 Javascript
jQuery选择器总结之常用元素查找方法
Aug 04 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 Javascript
layui select获取自定义属性方法
Aug 15 Javascript
js实现拖拽与碰撞检测
Sep 18 Javascript
js实现圆形菜单选择器
Dec 03 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实现按照权重随机排序数据的方法
2015/01/09 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
使用javascript插入样式
2016/03/14 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
Python中的作用域规则详解
2015/01/30 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
财政专业求职信范文
2014/02/19 职场文书
伊索寓言教学反思
2014/05/01 职场文书
施工安全生产承诺书
2014/05/23 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python