vue-router自动判断左右翻页转场动画
前段时间做了一个移动端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自动判断左右翻页转场动画的更多相关文章
- Vue 左右翻页,点赞动画
因做小活动比较多,使用了一些动画,做些笔记,供大家参考 翻页动画 router -> index.js import Vue from 'vue'; import Router from 'vu ...
- CSS3——制作图片翻页的小动画
觉得还挺有意思的嘻嘻~ 这里有一个问题要注意一下,图片反转过程中可能会遇到一种如下所示的跳变bug: 这玩意一出来吓我一大跳,显然这种用户体验是很不好的,解决方法: 在.pic, .info{...} ...
- WPF中ListBox ListView数据翻页浏览笔记(强调:是数据翻页,非翻页动画)
ListBox和ListView在应用中,常常有需求关于每页显示固定数量的数据,然后通过Timer自动或者手动翻页操作,本文介绍到的就是该动作的实现. 一.重点 对于ListBox和ListView来 ...
- 通过js实现整屏滑动+全屏翻页+动画展示+线性图
技术:html+css+jquery+jquery-ui.js+jquery.fullPage.js 概述 本demo主要通过html+css+js实现整屏滑动,全屏翻页并带动画的功能效果,借助于 ...
- iOS:UIPageViewController翻页控制器控件详细介绍
翻页控制器控件:UIPageViewController 介绍: 1.它是为我们提供了一种类似翻书效果的一种控件.我们可以通过使用UIPageViewController控件,来完成类似图书一样的翻页 ...
- c#翻页效果
用c#和GDI+实现杂志翻页动画效果时间:2010-01-13 blog.csdn.net 周公 - 说明:以前本人参与个一个电子杂志项目,当时要求实现模拟现实生活中的杂志翻页动画效果,别人推荐了这篇 ...
- ViewPager实现自动翻页功能 --转载出处找不到了,根据自己的理解写个随笔方便以后的记忆以及代码的共享,感谢给我启发的那位高手--第一次写博客哈
xml文件 textview 用于显示图片的标题 viewpager 用于实现翻页效果 <LinearLayout xmlns:android="http://schemas.andr ...
- vue table中使用多选的问题(翻页后如何保存已选项),联动echarts图表实现流量监控
流量监控项目需求: 根据表格数据,添加多选功能,默认全选,根据已选项更新图表视图 1.表格需要多选 2.要联动图表,所以关键是要利用表格多选的触发回调函数 vue table中使用多选: 很简单,只需 ...
- vue案例 - vue-awesome-swiper实现h5滑动翻页效果
说到h5的翻页,很定第一时间想到的是swiper.但是我当时想到的却是,vue里边怎么用swiper?! 中国有句古话叫:天塌下来有个高的顶着. 在前端圈里,总有前仆后继的仁人志士相继挥洒着热汗(这里 ...
随机推荐
- MySQL 数据类型和约束(外键是重点🙄)
数据类型 1. 数字(默认都是由符号,宽度表示的是显示宽度,与存储无关).tinyint 括号里指定宽度 七位2进制数最大数就是2**7 -1=127 最小是-128 验证: create tabel ...
- Integration Services 服务连接失败,拒绝访问以及无法检索数据报错问题
第一个方法比较简单:把域账号添加admin组即可: 第二种方法: 添加域账号到分布式 COM 组 命令提示符下运行 dcomcnfg.exe 下一步 下一步 启动和激活权限 下一步 访问权限 同上设置 ...
- TPYBoard开发板ADC数模转换一: 初识ADC使用
转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 1.前言 ADC,Analog-to-DigitalConverter的缩写,指模/数转换器或者模数转换器[1].是指将连续变化的模 ...
- js 闭包的用法详解
一.闭包 实现可重用的局部变量,且保护其不受污染的机制. 外层函数包裹受保护的变量和内层函数. 内层函数专门负责操作外层函数的局部变量. 将内层函数返回到外层函数外部,反复调用. 二.作用域 子函数会 ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
- #多个关联的python程序在linux后台运行
由于在shell脚本中直接使用&符号和python程序有冲突,不能正常的进入后台执行python(多番尝试python xxx.py &,后面的&总是不能正常识别.系统cent ...
- MySQL使用存储过程代替子查询
摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...
- Python 的类的下划线命名有什么不同?
1. 以一个下划线开头的命名 ,如_getFile2. 以两个下划线开头的命名 ,如__filename3. 以两个下划线开头和结尾的命名,如 __init__()4. 其它 单下划线前缀的 ...
- java String 不可变
关于String不可变的问题也看了很多,最近看了一篇讲的非常好的文章,总结如下 所谓的不可变,并非真的不可变String s = "123"; s = "456" ...
- Jerry的通过CDS view + Smart Template 开发Fiori应用的blog合集
S4/HANA里有一个新的UI框架叫做Smart template, 配合ABAP后台的CDS view技术,能够让developer以Metadata driven的方式来开发Fiori应用, 这种 ...