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检测对象中是否存在某个属性判断方法小结
May 19 Javascript
js获取当前日期时间及其它操作汇总
Apr 17 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
微信小程序 视图容器组件的详解及实例代码
Jan 19 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
canvas绘制爱心的几种方法总结(推荐)
Oct 31 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
Apr 26 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
Jul 10 Javascript
vue生成token并保存到本地存储中
Jul 17 Javascript
Vue路由模块化配置的完整步骤
Aug 14 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
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP自定义错误用法示例
2016/09/28 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
将Python代码打包为jar软件的简单方法
2015/08/04 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
python 以16进制打印输出的方法
2018/07/09 Python
python reverse反转部分数组的实例
2018/12/13 Python
Python中@property的理解和使用示例
2019/06/11 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
设计部经理的岗位职责
2013/11/16 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
初三学生评语大全
2014/04/24 职场文书
党员干部一句话承诺
2014/05/30 职场文书
大国崛起观后感
2015/06/02 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
golang中的struct操作
2021/11/11 Golang