Vue 提供了 transition
的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡
- 条件渲染 (使用
v-if
) - 条件展示 (使用
v-show
) - 动态组件
- 组件根节点
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/vue.js" type="text/javascript" charset="utf-8"></script> <style type="text/css"> .content{ width: 200px; height: 200px; background: skyblue; } /* 会追加类名 */ .fade-enter-active, .fade-leave-active { transition: opacity 5s; } .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { opacity: 0; } .slide-enter-active, .slide-leave-active { transition: all 5s; } .slide-enter, .slide-leave-to /* .fade-leave-active below version 2.1.8 */ { transform: translateX(500px); opacity: 0; } </style> </head> <body> <div id="app"> <!-- 属性name会跟框架追加的类名一致 --> <transition name="slide"> <div v-if="isShow" class="content"> </div> </transition> <button @click="toggleEvent" type="button">切换内容</button> </div> <script type="text/javascript"> let app = new Vue({ el:"#app", data:{ isShow:true }, methods:{ toggleEvent:function(){ this.isShow = !this.isShow } } }) </script> </body> </html>
2.过渡的类名:
-
v-enter
:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。 -
v-enter-active
:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。 -
v-enter-to
:2.1.8 版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时v-enter
被移除),在过渡/动画完成之后移除。 -
v-leave
:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。 -
v-leave-active
:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。 -
v-leave-to
:2.1.8 版及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时v-leave
被删除),在过渡/动画完成之后移除。
下面是一个菜单栏的简单实现:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="js/vue.js" type="text/javascript"></script> <style type="text/css"> *{ margin: 0; padding: 0; box-sizing: border-box; } .page{ width: 100vw; height: 100vh; background-color: #efefef; position: fixed; left: 0; top: 0; } .rMenu{ width: 50vw; height: 100vh; position: fixed; left: 0; top: 0; transform: translateX(50vw); background-color: skyblue; } .slideRight-enter-active{ transition: all 1s; } .slideRight-leave-active{ transition: all 5s; } .slideRight-enter,.slideRight-leave-to{ transform: translateX(100vw); } </style> </head> <body> <div id="app"> <div class="page"> 首页 <button @click="toggleMenu" type="button">切换侧边栏</button> </div> <transition name="slideRight"> <!-- <div class="rMenu" v-if="isShow"> 侧边栏 </div> --> <div class="rMenu" v-show="isShow"> 侧边栏 </div> </transition> </div> <script type="text/javascript"> let app = new Vue({ el:"#app", data:{ isShow:false }, methods:{ toggleMenu:function(){ this.isShow = !this.isShow; } } }) </script> </body> </html>
3.自定义过渡类名:
我们可以通过以下 attribute 来自定义过渡类名:
enter-class
enter-active-class
-
enter-to-class
(2.1.8+) leave-class
leave-active-class
-
leave-to-class
(2.1.8+)
简单的例子自定义过渡动画如下:
①首先需要在项目css文件里加入网上的css链接地址如下:
②使用 <link rel="stylesheet" type="text/css" href="css/animate.min.css"/>引入CSS
③ 自定义过渡动画实现动态过渡
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="css/animate.min.css"/> <script src="js/vue.js" type="text/javascript" charset="utf-8"></script> <style type="text/css"> .content{ width: 200px; height: 200px; background: skyblue; margin: 0 auto; } /* 会追加类名 */ .fade-enter-active, .fade-leave-active { transition: opacity 5s; } .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { opacity: 0; } .slide-enter-active, .slide-leave-active { transition: all 5s; } .slide-enter, .slide-leave-to /* .fade-leave-active below version 2.1.8 */ { transform: translateX(500px); opacity: 0; } </style> </head> <body> <div id="app"> <!-- 属性name会跟框架追加的类名一致 --> <transition name="slide" enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight"> <div v-if="isShow" class="content"> </div> </transition> <button @click="toggleEvent" type="button">切换内容</button> </div> <script type="text/javascript"> let app = new Vue({ el:"#app", data:{ isShow:true }, methods:{ toggleEvent:function(){ this.isShow = !this.isShow } } }) </script> </body> </html>