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 相关文章推荐
JSQL 批量图片切换的实现代码
May 05 Javascript
判断浏览器的javascript版本的代码
Sep 03 Javascript
页面加载完毕后滚动条自动滚动一定位置
Feb 20 Javascript
Jquery响应回车键直接提交表单操作代码
Jul 25 Javascript
javascript针对cookie的基本操作实例详解
Nov 30 Javascript
javascript实现拖放效果
Dec 16 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
浅谈webpack下的AOP式无侵入注入
Nov 12 Javascript
javascript实现考勤日历功能
Nov 29 Javascript
vue如何实现动态加载脚本
Feb 05 Javascript
jQuery实现动态加载瀑布流
Sep 01 jQuery
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 SQL之where语句生成器
2009/03/24 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
php命令行写shell实例详解
2018/07/19 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
JS实现评价的星星功能
2017/08/20 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
python读写json文件的简单实现
2017/04/11 Python
Python面向对象进阶学习
2019/05/21 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
六月份红领巾广播稿
2014/02/03 职场文书
银行求职信怎么写
2014/05/26 职场文书
十佳党员事迹材料
2014/08/28 职场文书
社区敬老月活动总结
2015/05/07 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL