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 相关文章推荐
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
Jan 08 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
Sep 22 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
jQuery中$.each使用详解
Jan 29 Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
Javascript中typeof 用法小结
May 12 Javascript
Node.js使用Express.Router的方法
Nov 14 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
Oct 28 Javascript
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
分享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
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
pip install urllib2不能安装的解决方法
2018/06/12 Python
Python定时任务sched模块用法示例
2018/07/16 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python之变量类型和if判断方式
2020/05/05 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
护理专业毕业生自荐信范文
2014/01/05 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
场地使用证明模板
2014/10/25 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
开学典礼校长致辞
2015/07/29 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js