vue router自动判断左右翻页转场动画效果


Posted in Javascript onOctober 10, 2017

前段时间做了一个移动端spa项目,技术基于 :vue + vue-router + vuex + mint-ui

因为使用了vue-cli脚手架的webpack模版,所有页面都以.vue为后缀的文件作为一个组件

最近公司项目比较少终于有空来记录一下自己对vue-router的一些小小的使用心得,

一般的移动端口单页应用在跳转页面时候会有相应的转场动画,比如:

1. 从当前一级页面跳转二级页面需要展示的转场动画是一级页面向屏幕左边移动消失的同时,

 二级页面从屏幕的右边向左边移动出现。(类似翻书翻到下一页的效果)

2. 从当前二级页面跳回一级页面需要展示的转场动画是二级页面向屏幕右边移动消失的同时,

 一级页面从屏幕的左边向右边移动出现。类似(翻书翻回到上一页的效果)

但是出现了一个问题:如何判断当前页面和将要跳转页面之间的层级关系呢?

我的解决办法是:创建页面 (组件)时,在定义页面的router里通过设置页面的path(访问路径 )属性来区分组件之间的层级关系。

比如一个一级页面 (组件) ‘A' 的访问路径为 ‘/A' 。他的二级页面 ‘B' 的访问路径为 ‘/A/B' .

那么在跳转页面之前,只需要比较当前页面和将要跳转到的页面的路径深度就可以动态设置转场动画了。

比如 ‘/A/B'的深度 >  ‘/A' 的深度那么 从B页面跳转到A页面就应该是 效果2:(翻书翻回到上一页的效果).

一 。首先父页面

home.vue:

<!-- keepAlList是用来动态判断组件是否需要keep-alive,建议保存到vuex中作为全局变量,至于下方的css动画,看官可以按照喜好自由修改-->
<transition :name="transNa">
 <keep-alive :include="keepAlList">
 <router-view class="child-view"></router-view>
 </keep-alive>
</transition>
<style scoped>
.child-view {
 position: absolute;
 width: 100%;
 height: 100%;
 transition: all .5s ease;
 -webkit-transition: all .5s ease;
 -moz-transition: all .5s ease;
}
.rightin-enter,
.leftin-leave-active {
 opacity: 0;
 transform: translate3d(50% 0, 0);
 -webkit-transform: translate3d(50%, 0, 0);
 -moz-transform: translate3d(50%, 0, 0);
}
.leftin-enter,
.rightin-leave-active {
 opacity: 0;
 transform: translate3d(-50% 0, 0);
 -webkit-transform: translate3d(-50%, 0, 0);
 -moz-transform: translate3d(-50%, 0, 0);
}
</style>

二 。其次附上我的main.js片段(用来在跳转页面之前动态设置转场动画)

main.js:

//进入路由之前设置拦截器
let noLoginList = ["login", "register", "forget", "home", "classify", "goodsDetial"];
router.routeInfo.beforeEach((to, from, next) => {
 let user = sessionStorage.getItem('user');
 //如果要去登录页面
 if (noLoginList.indexOf(to.name) >= 0) {
  if (!user || user == '') {
   //未登录的状态通行
   next();
   return;
  } else {
   if (["login", "register", "forget"].indexOf(to.name) >= 0) {
    //已登录的状态去首页
    next({
     name: 'home'
    });
    return;
   } else {
    //已登录的状态去首页
    next();
    return;
   }
  }
 } else {
  //去登录页面以外的页面(以下是本文关键代码)
  if (user && user != '') {
   //判断是否为需要缓存组件,如果是添加组件名到数组
   if (to.meta.keepAlive) {
    const toName = to.name;
    let keepLi = store.getters.getKeepAlList;
    keepLi.indexOf(toName) < 0 ? keepLi.push(toName) : '';
    store.commit('SET_KEEPALLIST', keepLi);
   }
   //根据路径名深度设置转场动画类型
   store.commit('SET_TRANSNA', (to.path.split('/').length < from.path.split('/').length ? 'leftin' : 'rightin'));
   next();
  } else {
   let toWhere = router.nameList.indexOf(to.name) >= 0 ? to : {name: 'home'};
   next({
    name: 'login',
    params: {
     jumpTo: {
      name: toWhere.name,
      params: toWhere.params,
      query: toWhere.query,
     },
    }
   });
  }
 }
});

总结

以上所述是小编给大家介绍的vue router自动判断左右翻页转场动画效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 深拷贝函数
Dec 04 Javascript
jQuery对表单的操作代码集合
Apr 06 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
Nov 23 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
Aug 30 Javascript
javascript实现自动填写表单实例简析
Dec 02 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
Oct 25 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
如何自定义微信小程序tabbar上边框的颜色
Jul 09 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
vue点击按钮动态创建与删除组件功能
Dec 29 Javascript
JavaScript适配器模式原理与用法实例详解
Mar 09 Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 #Javascript
ionic选择多张图片上传的示例代码
Oct 10 #Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 #Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 #Javascript
Vue实现数字输入框中分割手机号码的示例
Oct 10 #Javascript
JS判断数组那点事
Oct 10 #Javascript
template.js前端模板引擎使用详解
Oct 10 #Javascript
You might like
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python 实现return返回多个值
2019/11/19 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
最新会计专业求职信范文
2014/01/28 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
购房意向书
2014/08/30 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python