vue-router实现webApp切换页面动画效果代码


Posted in Javascript onMay 25, 2017

vue-router实现webApp切换效果

演示效果

vue-router实现webApp切换页面动画效果代码

快速集成

1.复制PageTransittion.vue到项目目录。2.修改router配置。

Router.prototype.goBack = function () {
 this.isBack = true
 window.history.go(-1)
}
const router = new Router({
 routes: [
  {
   path: '/',
   name: 'PageTransition', 
   component: PageTransition, // 引入页面切换组件
   children: [{
    path: '',
    component: Index // 父路由访问页面,例如,访问www.aaa.com/ 显示的是Index组件
   }, {
    path: '/pageA',
    component: PageA // 子路由组件 例如,访问www.aaa.com/pageA 显示为PageA
   }, {
    path: '/pageB',
    component: PageB // 子路由组件 例如,访问www.aaa.com/pageB 显示为PageB
   }]
  }
 ]
})

方案实现

记录页面状态

要实现页面前进后台动画,首先必须知道页面状态(即是页面是进入下一页,还是后退),我们可以通过改写router.Go方法记录回退状态,页面如果需要回退时,调用

$router.go(-1)

修改router/index.vue

// 增强原方法,好处是旧的业务模块不需要任何变动
Router.prototype.go = function () {
 this.isBack = true
 window.history.go(-1)
}

// 或者你可以新建一个方法
Router.prototype.goBack = function () {
 this.isBack = true
 this.go(-1)
}

当new Router时,实例就包含go/goBack方法。

监听路由变化

使用嵌套路由的方式引入子页面,监听根路由的update钩子做相应操作。

beforeRouteUpdate (to, from, next) {
 // 如果isBack为true时,证明是用户点击了回退,执行slide-right动画
  let isBack = this.$router.isBack
  if (isBack) {
   this.transitionName = 'slide-right'
  } else {
   this.transitionName = 'slide-left'
  }
  // 做完回退动画后,要设置成前进动画,否则下次打开页面动画将还是回退
  this.$router.isBack = false
   next()
}

动画效果

通过transition执行动画

<transition :name="transitionName">
  <router-view class="child-view"></router-view>
 </transition>

css代码

.child-view {
 position: absolute;
 width:100%;
 transition: all .8s cubic-bezier(.55,0,.1,1);
}
.slide-left-enter, .slide-right-leave-active {
 opacity: 0;
 -webkit-transform: translate(50px, 0);
 transform: translate(50px, 0);
}
.slide-left-leave-active, .slide-right-enter {
 opacity: 0;
 -webkit-transform: translate(-50px, 0);
 transform: translate(-50px, 0);
}

路由设置

router/index.js

const router = new Router({
 routes: [
  {
   path: '/',
   name: 'PageTransition',
   component: PageTransition,
   children: [{
    // 该路由为父路由的默认路由
    path: '',
    component: Index
   }, {
    path: '/pageA',
    component: PageA
   }, {
    path: '/pageB',
    component: PageB
   }]
  }
 ]
})

github地址:https://github.com/zhengguorong/pageAinimate

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

Javascript 相关文章推荐
JavaScript 设计模式学习 Singleton
Jul 27 Javascript
浅谈JavaScript数据类型及转换
Feb 28 Javascript
理解js对象继承的N种模式
Jan 25 Javascript
解决jquery无法找到其他父级子集问题的方法
May 10 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
jQuery手指滑动轮播效果
Dec 22 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
记录一篇关于redux-saga的基本使用过程
Aug 18 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
vue2 设置router-view默认路径的实例
Sep 20 Javascript
vue制作toast组件npm包示例代码
Oct 29 Javascript
Angular 2.x学习教程之结构指令详解
May 25 #Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
May 25 #Javascript
js获取一组日期中最近连续的天数
May 25 #Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 #Javascript
slideToggle+slideup实现手机端折叠菜单效果
May 25 #Javascript
Bootstrap实现的标签页内容切换显示效果示例
May 25 #Javascript
React-router中结合webpack实现按需加载实例
May 25 #Javascript
You might like
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
浅谈php扩展imagick
2014/06/02 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
JS中eval函数的使用示例
2013/07/21 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
python re模块findall()函数实例解析
2018/01/19 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
世界上最大的艺术社区:SAA
2020/12/30 全球购物
护士毕业自我鉴定
2014/02/07 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
个人简历自荐信
2014/06/26 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
技术入股合作协议书
2014/10/07 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
从原生JavaScript到React深入理解
2022/07/23 Javascript