1、过渡的作用

Vue.js 内置了一套过渡系统,该系统是 Vue.js 为 DOM 动画效果提供的一个特性。在插入、更新或者移除 DOM 时可以触发 CSS 过渡和动画,从而产生过渡效果。

2、单元素过渡

2.1 CSS 过渡

Vue.js 提供了内置的过渡封装组件 transition,该组件用于包含要实现过渡效果的 DOM 元素。transition 组件只会把过渡效果应用到其包含的内容上,而不会额外渲染 DOM 元素。过渡封装组件的语法格式如下:

<transition name="nameoftransition"><div></div>
</transition>

语法中的 nameoftransition 参数用于自动生成 CSS 过渡类名。为元素和组件添加过渡效果主要应用在下列情形。

  • 条件渲染(使用 v-if 指令)
  • 条件展示(使用 v-show 指令)
  • 动态组件
  • 组件根节点

CSS 过渡的基础用法如下代码所示:

<div id="box"><button v-on:click="show=!show">切换显示</button><transition name="fade"><p v-if="show">为了梦想,扬帆起航</p></transition></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{show:true}});</script><style type="text/css">/*设置CSS属性名和持续时间 */.fade-enter-active,.fade-leave-active{transition: opacity 2s}.fade-enter,.fade-leave-to{opacity: 0}</style>

通过单击“切换显示”按钮将变量 show 的值在 true 和 false 之间进行切换。如果为 true,则淡入显示 p 元素的内容,如果为 false,则淡出隐藏 p 元素的内容。运行结果如下图所示。

CSS 过渡其实就是一个淡入淡出的效果。当插入或删除包含在 transition 组件中的元素时,Vue.js 将执行如下操作:

  • 自动检测目标元素是否应用了 CSS 过渡或动画,如果是,则在合适的时机添加/删除 CSS 类名。
  • 如果过渡组件提供了 JavaScript 钩子函数,这些钩子函数将在合适的时机被调用。
  • 如果没有找到 JavaScript 钩子并且没有检测到 CSS 过渡/动画,DOM 操作(插入/删除)将在下一帧中立即执行。

2.2 过渡的类名介绍

Vue.js 在元素显示与隐藏的过渡中,提供了如下几个 class 来切换,class 类名及其说明如下表所示:

注意:对于这些在过渡中切换的类名来说,如果使用一个没有名字的 transition,则 v-是这些类名的默认前缀。

2.3 CSS 动画

CSS 动画的用法和 CSS 过渡类似,但是在动画中 v-enter 类名在节点插入 DOM 后不会立即删除,而是在 animationend 事件触发时删除。示例代码如下所示:

<div id="box" align="center"><button v-on:click="show=!show">切换显示</button><transition name="scaling"><p v-if="show">为了梦想,扬帆起航</p></transition></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{show:true}});</script><style type="text/css">p{font: 30px "微软雅黑";/*设置字体和字体大小 */margin: 30px auto;/*设置元素外边距*/font-weight: 500;/*设置字体粗细*/color: #35626;/*设置文字颜色*/}/* 设置 animation 属性的参数*/.scaling-enter-active{animation: scaling 1s}.scaling-leave-active{animation: scaling 1s reverse}/* 设置元素的缩放转换*/@keyframes scaling{0%{transform: scale(0);}50%{transform: scale(1.2);}100%{transform: scale(1);}}</style>

当单击“切换显示”按钮时,文本会以缩放的动画形式进行隐藏,再次单击该按钮,文本会以缩放的动画形式进行显示。运行结果如下图所示:

2.4 自定义过渡的类名

除了使用普通的类名(如 *-enter、 *-leave 等)之外,Vue.js 也允许自定义过渡类名。自定义的过渡类名的优先级高于普通的类名。通过自定义过渡类名可以使用过渡系统和其他第三方 CSS 动画库(如 animate.css)相结合,实现更丰富的动画效果。自定义过渡类名可以通过一下 6 个属性来实现:

  • enter-class
  • enter-active-class
  • enter-to-class
  • leave-class
  • leave-active-class
  • leave-to-class

在应用第三方 CSS 动画库文件 animate.css 的前提下,通过一个实例来了解自定义过渡类名的使用。代码如下:

<style type="text/css">p{font: 30px "微软雅黑";/*设置字体和字体大小 */margin: 40px auto;/*设置元素外边距*/font-weight: 500;/*设置字体粗细*/color: #35626;/*设置文字颜色*/}</style><div id="box" align="center"><button v-on:click="show=!show">切换显示</button><transition name="rotate" enter-active-class="animated rotateIn" leave-active-class="animated rotateOut"><p v-if="show">为了梦想,扬帆起航</p></transition></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{show:true}});</script>

允许结果如下图所示:

3、多元素过渡

3.1 基础用法

最常见的多元素过渡是一个列表和描述这个列表为空消息的元素之间的过渡。在处理多元素过渡时可以使用 v-if 和 v-else。示例代码如下所示:

<style type="text/css">/*设置过渡属性*/.fade-enter,.fade-leave-to{opacity: 0;}.fade-enter-active,.fade-leave-active{transition: opacity .5s;}</style><div id="box"><button @click="clear">清空</button><transition name="fade"><ol v-if="items.length > 0"><li v-for="item in items">{{item}}</li></ol><p v-else>列表为空</p></transition></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{items:['演员','歌手','导演']},methods:{clear:function(){this.items.splice(0);//清空数组}}});</script>

当点击“清空”按钮时,页面内容变化会有一个过渡的效果,结果如下图所示:

3.2 key 属性

当有相同标签名的多个元素进行切换时,需要通过 key 属性设置唯一的值来标记以让 Vue 区分它们。代码如下:

<style type="text/css">/*设置过渡属性*/.fade-enter,.fade-leave-to{opacity: 0;}.fade-enter-active,.fade-leave-active{transition: opacity .5s;}</style><div id="box"><button @click="show = !show">切换</button><transition name="fade"><p v-if="show" key="m">你曾经说过这样一句话:</p><p v-else key="w">脚踏实地,保持初心,去做自己想做的事</p></transition></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{show:true}});</script>

当点击“清空”按钮时,页面内容变化会有一个过渡的效果,结果如下图所示:

3.3 过渡模式

在 transition 的默认行为中,元素的进入和离开是同时发生的。由于同时生效的进入和离开的过渡不能满足所有要求。因此,Vue.js 提供了两种过渡模式:

  • in-out:新元素先进行过渡,完成之后当前元素过渡离开
  • out-in:当前元素先进行过渡,完成之后新元素过渡进入

应用 out-in 模式实现过渡的示例代码如下所示:

<style type="text/css">/*设置过渡属性*/.fade-enter,.fade-leave-to{opacity: 0;}.fade-enter-active,.fade-leave-active{transition: opacity .5s;}</style><div id="box"><transition name="fade" mode="out-in"><button @click="show=!show":key="show">{{show?'显示':'隐藏'}}</button></transition></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{show:true}});</script>

当每次单击按钮时,按钮中的文字都会在“显示”和“隐藏”之间进行过渡切换,运行结果如下图所示:

4、多组件过渡

多个组件的过渡不需要使用 key 属性,只需要使用动态组件。示例代码如下所示:

<style type="text/css">/*设置过渡属性*/.fade-enter,.fade-leave-to{opacity: 0;}.fade-enter-active,.fade-leave-active{transition: opacity .5s;}</style><div id="box"><button @click="toggle">切换组件</button><transition name="fade" mode="out-in"><component :is="cName"></component></transition></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{cName:'componentA'},components:{componentA:{ //定义组件componentAtemplate:'<p>组件A:你好</p>'},componentB:{//定义组件componentBtemplate:'<p>组件B:晓茗</p>'}},methods:{toggle:function(){//切换组件名称this.cName = this.cName == 'componentA'?'componentB':'componentA';}}});</script>

当点击“切换组件”按钮时,页面内容变化会有一个过渡的效果,结果如下图所示:

5、列表过渡

实现列表过渡需要使用 v-for 和 transition-group 组件,该组件特点如下所示:

  • 与 transition 组件不同,它会以一个真实元素呈现,默认为一个 span 元素。可以通过 tag 属性更换为其他元素。
  • 过渡模式不可用,因为不再相互切换特有的元素
  • 列表中的元素需要提供唯一的 key 属性值

列表过渡的基础用法代码示例如下所示:

<style type="text/css">/*元素的样式*/.list-item{display: inline-block;margin-right: 10px;background-color: darkgreen;width: 30px;height: 30px;line-height: 30px;text-align: center;color: aquamarine;}/*插入过程和移除过程的过渡效果*/.num-enter-active,.num-leave-active{transition: all 1s;}/*开始插入,移除结束时的状态*/.num-enter,.num-leave-to{opacity: 0;transform: translateY(30px);}</style><div id="box"><div><button v-on:click="add">插入一个数字</button><button v-on:click="remove">移除一个数字</button><transition-group name="num" tag="p"><span v-for="item in items" v-bind:key="item" class="list-item">{{item}}</span></transition-group></div></div><script type="text/javascript">//创建根实例var vm =new Vue({el :'#box',data:{items:[1,17,8,18,5,20],nextNum:7},methods:{//生成随机数索引randomNumber:function(){return Math.floor(Math.random() * this.items.length)},//添加数字add:function(){this.items.splice(this.randomNumber(),0,this.nextNum++)},//移除数字remove:function(){this.items.splice(this.randomNumber(),1)}}});</script>

当单击“插入一个数字”按钮时,会在下方的随机位置插入一个新的数字。当单击“移除一个数字”按钮时,会在下方的随机位置移除一个数字。运行结果如下图所示:


备注:后期会继续跟进 Vue.js前端框架:常用插件,希望大家的多多支持和关注。

10.Vue.js前端框架:过渡相关推荐

  1. 3.Vue.js前端框架:条件判断与列表渲染

    3.1 条件判断 在视图中,经常需要控制某些DOM元素的显示或隐藏.Vue.js提供了多个指令来实现条件的判断,包括 v-if.v-else.v-else-if.v-show指令.下面分别进行介绍. ...

  2. Web前端-Vue.js必备框架(一)

    Web前端-Vue.js必备框架(一) <!DOCTYPE html> <html lang="en"> <head><meta char ...

  3. Web前端-Vue.js必备框架(二)

    Web前端-Vue.js必备框架(二) vue调式工具vue-devtools 过滤器:vue.js允许你自定义过滤器,可被用作一些常见的文本格式化. mustache插值和v-bind表达式. vu ...

  4. 10 个最佳前端框架列表,建议你收藏

    参考:百度安全验证 用于 Web 开发的 10 个最佳前端框架列表 用户体验是每个开发网站的企业的重中之重.无论后台有多方面的操作和功能,用户的视图和体验都必须是无缝的.这需要使用前端框架来简化交互式 ...

  5. 10大H5前端框架(转)

    10大H5前端框架 作为一名做为在前端死缠烂打6年并且懒到不行的攻城士,这几年我还是阅过很多同门从知名到很知名的各种前端框架,本来想拿15-20个框架来分享一下,但在跟几个前辈讨教写文章的技巧时果断被 ...

  6. Vue+Iview前端框架搭建

    Vue+Iview前端框架搭建 前端搭建 插件介绍 引入到项目 前端搭建 Vue+Iview前端框架需要的插件 插件介绍 Vue,Iview,常用的v-charts Vue.js , 点我到官网.笔者 ...

  7. Vue.js UI框架比较

    Vue 是什么? Vue.js 是 Evan You 开发的渐进式 JavaScript 框架.开发者能够通过撰写 *.vue 文件,基于 <template>, <style> ...

  8. 前端html5的框架有哪些,10大html5前端框架

    10大html5前端框架 Bootstrap 首先说Bootstrap,估计你也猜到会先说,或者一定会有这个了,这是说明它的强大之处. 拥有框架一壁江山的势气. 自己刚入道的时候,本着代码任何一个字母 ...

  9. 2018几大主流的 UI/JS 前端框架

    2016年开始应该是互联网飞速发展的几年,同时也是Web前端开发非常火爆的一年,Web 前端技术发展速度让人感觉几乎不是继承式的迭代,而是一次次的变革和创造.这一年中有很多热门的前端开发框架,下面源码 ...

最新文章

  1. OKR是什么?-源目标OKR
  2. Linux学习--目录结构
  3. iOS开发之裁剪圆形头像
  4. 【10月17日】2020年十月蓝桥杯A组题目【感想与总结】(热乎的)
  5. 如何查询网站的物理服务器,如何查询云服务器和物理服务器 哪一个更好?
  6. 双11肯德基星巴克在饿了么各卖出2亿元
  7. mysql数据库咋还原_mysql数据库备份和还原
  8. 深大计算机系有金工实习吗,金工实习报告答案深圳大学拿A答案(精选).pdf
  9. VB计算文本文件的行数
  10. 局域网访问虚拟机服务器桥接,虚拟机让局域网访问的方法---桥接模式
  11. ElementUI:nav收起后点击后出现黑色边框
  12. PHP与MySQL设计模式:代理模式
  13. 简述c、c++和java三大语言特性
  14. 前端展示m3u8视频
  15. VideoJS 网页直播实现双击全屏
  16. 注册AWS账号创建EC2免费套餐详细教程
  17. 2020年司钻(井下)考试申请表及司钻(井下)复审模拟考试
  18. P2791 幼儿园篮球题
  19. html图片重叠鼠标点击更换,html实现点击预览图切换图片方法
  20. 格式化时间戳,时间加一天

热门文章

  1. visual studio STM32上位机开发 LED上位机
  2. 科学计算器如何求矩阵的逆
  3. 使用map文件 查看stm32 堆栈大小 及 堆栈分配 图
  4. vue 中 filter 的使用与注册
  5. 网络显示连接,但是无法打开网页的解决方法
  6. 数据库平滑扩容方案剖析
  7. 5条快速优化博客的SEO技巧
  8. 企业网络视频监控解决方案
  9. 虚拟机之间文件的传输
  10. 什么是病毒,什么是木马,两者到底有什么区别