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 相关文章推荐
验证用户是否修改过页面的数据的实现方法
Sep 26 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
JavaScript中数据结构与算法(四):串(BF)
Jun 19 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
深入探秘jquery瀑布流的实现
Jan 30 Javascript
NODE.JS跨域问题的完美解决方案
Oct 20 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
JS实现横向跑马灯效果代码
Apr 20 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
PHP的单引号和双引号 字符串效率
2009/05/27 PHP
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
ext for eclipse插件安装方法
2008/04/27 Javascript
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
HTML5之语义标签介绍
2016/07/07 HTML / CSS
医学院四年学习生活的自我评价
2013/11/06 职场文书
安全教育心得体会
2013/12/29 职场文书
十佳青年事迹材料
2014/08/21 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
Python if else条件语句形式详解
2022/03/24 Python