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 相关文章推荐
JQuery从头学起第三讲
Jul 06 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
Jquery的each里用return true或false代替break或continue
May 21 Javascript
使用JS+plupload直接批量上传图片到又拍云
Dec 01 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
Oct 30 Javascript
用Node编写RESTful API接口的示例代码
Jul 04 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
Nov 06 Javascript
NUXT SSR初级入门笔记(小结)
Dec 16 Javascript
小程序实现背景音乐播放和暂停
Jun 19 Javascript
Vue通过provide inject实现组件通信
Sep 03 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 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 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
Python实现简单的代理服务器
2015/07/25 Python
Python timeit模块的使用实践
2020/01/13 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
学前教育求职自荐信范文
2013/12/25 职场文书
高一历史教学反思
2014/01/13 职场文书
数学检讨书1000字
2014/02/24 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
企业文化口号
2014/06/12 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2015年服务员工作总结
2015/04/08 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
浅析Python实现DFA算法
2021/06/26 Python