Vue 解决路由过渡动画抖动问题(实例详解)


Posted in Javascript onJanuary 05, 2020

前言

Vue-Router 作为 Vue 的核心模块,它为我们提供了基于组件的路由配置、路由参数等功能,让单页面应用变得更易于管理。良好的路由管理尤为重要,比如路由拦截、路由懒加载、路由权限等都在开发中起着至关重要的作用。同时路由还支持视图过渡效果,没有添加过渡动画的路由切换会感觉很生硬,为了提高用户体验,路由过渡还是很有必要的。毕竟做出来,自己看着也舒服。

过渡动效文档:https://cn.vuejs.org/v2/guide/transitions.html

过渡动画抖动

代码片段

这里为路由添加一个淡入淡出的过渡效果

<div id="app">
 <main class="app-main">
 <Topbar />
 <transition name="fade">
 <router-view />
 </transition>
 </main>
</div>
.fade-enter,
.fade-leave-to{
 visibility: hidden;
 opacity: 0;
}
.fade-enter-active,
.fade-leave-active{
 transition: opacity .2s ease;
}
.fade-enter-to,
.fade-leave{
 visibility: visible;
 opacity: 1;
}

效果

Vue 解决路由过渡动画抖动问题(实例详解)

图中可以很明显的看到,切换路由时,页面会发生抖动,而且抖动的还不小,看着强迫症都犯了。
那么问题来了,为什么会出现这种情况?

过程

发现问题

排除代码问题后,想到的可能是布局问题引发的这种情况,于是在chrome的调试工具中,一边切换路由一边观察布局的变化,终于找到了一点蹊跷

Vue 解决路由过渡动画抖动问题(实例详解)

仔细观察html的结构,会发现在路由过渡的过程中是会同时存在两个路由,一个是即将进入的路由,一个是即将消失的路由,这时想到有没有可能是其中一个路由占位导致抖动?

印证猜想

为了方便观察布局情况,将过渡的时间调大到30s,再次重复上面的操作

Vue 解决路由过渡动画抖动问题(实例详解)

在缓慢的过渡,可以更加清晰的看到,在切换到下一个路由(fade-enter-to)时,上一个路由(fade-leave-to)会占位使得下一个路由的位置下移,所以在快速过渡的情况才发生类似抖动的效果
既然问题找到了,那就找办法来解决它!

解决问题

只需要给fade-leave-to路由添加 display:none,让其在消失时不占位就可以解决问题。当然还可以使用定位来脱离文档流来解决,但定位之后偏移量等都需要计算,不太推荐。

.fade-enter{
 visibility: hidden;
 opacity: 0;
}
.fade-leave-to{
 display: none;
}
.fade-enter-active,
.fade-leave-active{
 transition: opacity .2s ease;
}
.fade-enter-to,
.fade-leave{
 visibility: visible;
 opacity: 1;
}

最后效果

Vue 解决路由过渡动画抖动问题(实例详解)

总结

以上所述是小编给大家介绍的Vue 解决路由过渡动画抖动问题,希望对大家有所帮助!

Javascript 相关文章推荐
window.open的功能全解析
Oct 10 Javascript
jquery实现居中弹出层代码
Aug 25 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
Aug 06 Javascript
jquery得到font-size属性值实现代码
Sep 30 Javascript
jQuery的DOM操作之删除节点示例
Jan 03 Javascript
js中document.write使用过程中的一点疑问解答
Mar 20 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
Dec 25 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
May 12 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
Feb 09 Javascript
JS实现可控制的进度条
Mar 25 Javascript
分享JS表单验证源码(带错误提示及密码等级)
Jan 05 #Javascript
jQuery 选择器用法基础入门示例
Jan 04 #jQuery
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
Jan 04 #Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
Jan 04 #Javascript
Angular8 实现table表格表头固定效果
Jan 03 #Javascript
uni-app 支持多端第三方地图定位的方法
Jan 03 #Javascript
Vue 实现登录界面验证码功能
Jan 03 #Javascript
You might like
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
详解各版本React路由的跳转的方法
2018/05/10 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
Java及python正则表达式详解
2017/12/27 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
Python装饰器结合递归原理解析
2020/07/02 Python
简单的Python人脸识别系统
2020/07/14 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
《北大荒的秋天》教学反思
2014/04/14 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
党员目标管理责任书
2014/07/25 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
人事文员岗位职责
2015/02/04 职场文书
教师节寄语2015
2015/03/23 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
python基础之类属性和实例属性
2021/10/24 Python