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.ajax 用户登录验证代码
Oct 29 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
Dec 13 Javascript
用JS实现轮播图效果(二)
Jun 26 Javascript
Javascript实现图片懒加载插件的方法
Oct 20 Javascript
js选项卡的制作方法
Jan 23 Javascript
VUE元素的隐藏和显示(v-show指令)
Jun 23 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
Nuxt.js SSR与权限验证的实现
Nov 21 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
Aug 14 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
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中simplexml_load_string函数使用说明
2011/01/01 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
复制本贴标题和地址的js代码
2008/07/01 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
Python模拟百度登录实例详解
2016/01/20 Python
Python与R语言的简要对比
2017/11/14 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
演讲稿怎么写才完美
2014/01/02 职场文书
师范毕业生自我鉴定
2014/01/15 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
2016年春节问候语
2015/11/11 职场文书
详解Java实现数据结构之并查集
2021/06/23 Java/Android
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
对讲机的最大通讯距离是多少
2022/02/18 无线电