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显示选择目录对话框的代码
Nov 10 Javascript
javaScript Array(数组)相关方法简述
Jul 25 Javascript
node.js中的fs.symlink方法使用说明
Dec 15 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
js中字符型和数值型数字的互相转化方法(必看)
Apr 25 Javascript
浅谈关于angularJs中使用$.ajax的注意点
Aug 12 Javascript
Vue中this.$router.push参数获取方法
Feb 27 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 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项目打包方法
2008/02/18 PHP
PHP合并静态文件详解
2014/11/14 PHP
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python 多线程实例详解
2017/03/25 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python实现K最近邻算法
2018/01/29 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
python实现抽奖小程序
2020/04/15 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
详解python中的lambda与sorted函数
2020/09/04 Python
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
学习党课思想汇报
2013/12/29 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
亲情作文之母爱
2019/09/25 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL