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 相关文章推荐
javascript自然分类法算法实现代码
Oct 11 Javascript
js验证输入是否为手机号码或电话号码示例
Dec 30 Javascript
js动态修改整个页面样式达到换肤效果
May 23 Javascript
JS生成不重复随机数组的函数代码
Jun 10 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
理解javascript中Map代替循环
Feb 26 Javascript
使用three.js 画渐变的直线
Jun 05 Javascript
vue引入swiper插件的使用实例
Jul 19 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
Nov 21 Javascript
vue实现购物车列表
Jun 30 Javascript
微信小程序实现电影App导航和轮播
Nov 30 Javascript
JS前端监控采集用户行为的N种姿势
Jul 23 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP 数组入门教程小结
2009/05/20 PHP
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
jquery对表单操作2
2011/04/06 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
在Python中使用第三方模块的教程
2015/04/27 Python
python图像处理之镜像实现方法
2015/05/30 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
python实现网站微信登录的示例代码
2019/09/18 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
毕业生就业自荐书
2013/12/15 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
python not运算符的实例用法
2021/06/30 Python
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python