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 相关文章推荐
浅说js变量
May 25 Javascript
javascript string字符串优化问题
Jul 31 Javascript
js中return false(阻止)的用法
Aug 14 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
Apr 23 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
10个JavaScript中易犯小错误
Feb 14 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
May 13 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
JS中promise化微信小程序api
Apr 12 Javascript
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
axios+Vue实现上传文件显示进度功能
Apr 14 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用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
destoon复制新模块的方法
2014/06/21 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python 类的继承实例详解
2017/03/25 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
pytorch中图像的数据格式实例
2020/02/11 Python
浅析matlab中imadjust函数
2020/02/27 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
最热门的自我评价
2013/12/30 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python