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 相关文章推荐
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
IE6已终止操作问题的2种情况及解决
Apr 23 Javascript
使用js画图之圆、弧、扇形
Jan 12 Javascript
探究JavaScript中的五种事件处理程序方式
Dec 07 Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
Jan 25 Javascript
Vue.js 利用v-for中的index值实现隔行变色
Aug 01 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
小程序如何获取多个formId实现详解
Sep 20 Javascript
selenium+java中用js来完成日期的修改
Oct 31 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
JavaScript运动原理基础知识详解
Apr 02 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下获取客户端ip地址的函数
2010/03/15 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
Django中处理出错页面的方法
2015/07/15 Python
python3音乐播放器简单实现代码
2020/04/20 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
Python socket实现简单聊天室
2018/04/01 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
python 调用Google翻译接口的方法
2020/12/09 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
阿巴庭院:Abba Patio
2019/06/18 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
体育教育专业自荐信范文
2013/12/20 职场文书
军训自我鉴定范文
2014/02/13 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
电话客服工作职责
2014/07/27 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
详解Redis瘦身指南
2021/05/26 Redis
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python