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加强的经典分页实例
Mar 15 Javascript
A标签中通过href和onclick传递的this对象实现思路
Apr 19 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
Jan 26 Javascript
js简单判断移动端系统的方法
Feb 25 Javascript
JavaScript的Vue.js库入门学习教程
May 23 Javascript
vue登录注册及token验证实现代码
Dec 14 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
Mar 01 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
vue的三种图片引入方式代码实例
Nov 19 Javascript
javascript中可能用得到的全部的排序算法
Mar 05 Javascript
了不起的11个JavaScript代码重构最佳实践小结
Jan 11 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
PHP获取文件扩展名的4种方法
2015/11/24 PHP
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
爬山算法简介和Python实现实例
2014/04/26 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
Python API自动化框架总结
2019/11/12 Python
Django封装交互接口代码
2020/07/12 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
介绍一下Java中标识符的命名规则
2014/02/03 面试题
精选干货:Java精选笔试题附答案
2014/01/18 面试题
测绘工程专业个人自我评价
2013/12/01 职场文书
小学教师事迹材料
2014/01/13 职场文书
公司中秋节活动方案
2014/02/12 职场文书
体育比赛口号
2014/06/09 职场文书
新闻传播专业求职信
2014/07/22 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
优秀员工推荐材料
2014/12/20 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP