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 相关文章推荐
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
Nov 23 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
javascript DOM的详解及实例代码
Mar 06 Javascript
ES6 javascript中class类的get与set用法实例分析
Oct 30 Javascript
Angular CLI在Angular项目中如何使用scss详解
Apr 10 Javascript
vue.js轮播图组件使用方法详解
Jul 03 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
Sep 04 Javascript
如何在CocosCreator里画个炫酷的雷达图
Apr 16 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
第一节--面向对象编程
2006/11/16 PHP
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
PHP中的日期加减方法示例
2014/08/21 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
Javascript 类型转换方法
2010/10/24 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python 排列组合之itertools
2013/03/20 Python
python使用htmllib分析网页内容的方法
2015/05/08 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
python多进程控制学习小结
2018/10/31 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
工作作风建设心得体会
2014/10/22 职场文书
个人租房协议书
2014/11/28 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书