Vue中的基础过渡动画及实现原理解析


Posted in Javascript onDecember 04, 2018

前言

在日常开发中 动画是必不可少的一部分 不仅能让元素直接的切换显得更加自然 同时也能极大的增强用户体验 因此 在Vue之中也提供了非常强大的关于动画这方面的支持 Vue不仅支持用CSS来写一些过渡效果 同时也是支持JS的 不过在这个文章中讲述的都是如何利用CSS来实现过渡动画、keyframes动画以及实现的原理

过渡动画实现的原理

1.首先最基础的一点在于 如果你想要在单元素/单个组件之中实现过渡动画 那么 你需要在元素/组件所在的HTML标签之外包裹一层  <transition>标签

2.当元素/组件被<transition>标签包裹了以后 那么Vue会自动的为我们构建一个动画流程 具体的流程会在下文提到 因此先记住这句话就行啦 也就是说 如果你在<style>标签中添加了一些样式的话Vue会自动的在某个时间节点给元素或者组件添加、删除对应的样式

3.上面提到了当元素/组件被<transition>标签包裹的时候Vue会自动的构建动画流程 也就是自动的在某个时间节点添加/删除对应的CSS类名 Vue其实提供了6个对应的类名 这里借助官网的一张图来罗列

Vue中的基础过渡动画及实现原理解析 

光这样看官网文字的解释可能感觉还不够清楚 所以这里我们借助一张图来帮助我们更好的理解这些CSS类名分别在什么时候被添加、移除

4 各个类名添加删除的时间

4.1

Vue中的基础过渡动画及实现原理解析 

我们假设黑色横线作为动画的整个流程 红点为动画开始的瞬间 那么 当我们用  <transition>标签包裹了元素/组件的时候 Vue会在动画即将开始还没开始的时候添加两个CSS类名 分别是v-enter/v-enter-to当动画开始的瞬间v-enter被自动的移除 而v-enter-active这个class会一直存在于整个动画过程中 直到动画结束的时候跟v-enter/v-enter-to一起被自动删除

4.2

Vue中的基础过渡动画及实现原理解析 

我们同样还是假设黑色横线作为动画的整个流程 那么在这里可以看到v-leave会在动画还没有开始的时候被添加上去 当动画开始的瞬间v-leave被移除 v-leave-to被添加 而v-leave-active会一直存在于整个动画过程中 直到动画结束的时候跟v-leave/v-leave-to一起被移除

###Coding

当有了这些理论知识以后 就可以动手写一个非常简单的demo了 假设现在有一个需求 页面上某个元素 通过按钮来控制隐藏和显示 同时这个隐藏和显示的过程中 有一个透明度由0-1的渐变过程

思路

通过v-if控制元素的显示 同时利用<transition>标签包裹元素实现透明度变化的过渡过程

1.先搭建基本页面以及通过按钮点击事件控制元素的隐藏与显示

Vue中的基础过渡动画及实现原理解析 

2.既然已知vue会在元素被<transition>包裹以后自动添加类名 那就在<style>标签里写上对应的样式效果

<style>
 .v-enter,
 .v-leave-to {
  opacity: 0;
 }
 .v-enter-active,
 .v-leave-active {
  transition: opacity 3s;
 }
 </style>

这里需要理解的一点在于 上文已经提到 当进场动画触发的时候 v-enter会立马被移除 因此在样式里把opacity写成0 也就是说 原本页面上没有显示但是即将要显示这个元素的时候 opacity会变为1 而v-enter-active全程都在监听transition:opacity的变化 如果变化了 就让效果在3秒内结束 反之退场动画也是同样的 v-leave-to会在动画执行的时候被添加 这个时候 v-leave-active感知到了transition:opacity的变化 会在3秒内做出对应的改变 最终代码运行结果如下

Vue中的基础过渡动画及实现原理解析

总结

以上所述是小编给大家介绍的Vue中的基础过渡动画及实现原理解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
网页常用特效代码整理
Jun 23 Javascript
jquery图片延迟加载 前端开发技能必备系列
Jun 18 Javascript
jquery动态更换设置背景图的方法
Mar 25 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
Feb 05 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
Aug 31 Javascript
学JavaScript七大注意事项【必看】
May 04 Javascript
JS实现验证码倒计时的注册页面
Jan 02 Javascript
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
重置Redux的状态数据的方法实现
Nov 18 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 Javascript
js实现飞机大战小游戏
Aug 26 Javascript
使用FormData实现上传多个文件
Dec 04 #Javascript
vue自定义指令的创建和使用方法实例分析
Dec 04 #Javascript
用vuex写了一个购物车H5页面的示例代码
Dec 04 #Javascript
vue实现的双向数据绑定操作示例
Dec 04 #Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 #jQuery
jQuery利用FormData上传文件实现批量上传
Dec 04 #jQuery
vue实现的组件兄弟间通信功能示例
Dec 04 #Javascript
You might like
php的正则处理函数总结分析
2008/06/20 PHP
PHP array 的加法操作代码
2010/07/24 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
python框架中flask知识点总结
2018/08/17 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
教师岗位职责范本
2013/12/29 职场文书
工会工作先进事迹
2014/08/18 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js