前言
上一篇使用component元素实现组件切换,但是没有切换的动画效果。那么可以参考官网的例子,实现一下组件切换的动画,以及mode效果设置。
官网说明:多个组件的过渡
多个组件的过渡简单很多 – 我们不需要使用 key
attribute。相反,我们只需要使用动态组件:
<transition name="component-fade" mode="out-in">
<component v-bind:is="view"></component>
</transition>
new Vue({
el: '#transition-components-demo',
data: {
view: 'v-a'
},
components: {
'v-a': {
template: '<div>Component A</div>'
},
'v-b': {
template: '<div>Component B</div>'
}
}
})
.component-fade-enter-active, .component-fade-leave-active {
transition: opacity .3s ease;
}
.component-fade-enter, .component-fade-leave-to
/* .component-fade-leave-active for below version 2.1.8 */ {
opacity: 0;
}
从上面官网的例子中,写这个组件切换的动画效果例子,主要由以下几个步骤写起来,如果单纯这样看一个最终写完的示例,可能不太清楚里面的道理。
步骤如下:
-
编写使用 component
切换组件的功能,完成基本的切换效果 -
使用 transition
包括component
组件,并命名name
为component-fade
-
在 css
中编写component-fade
入场、出场的动画效果 -
最后,加上动画的模式 mode
下面,我再写一个示例,一步步来演示看看。
示例
1.编写使用component
切换组件的功能,完成基本的切换效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 导入vue.js库 -->
<script src="lib/vue.js"></script>
</head>
<body>
<div id="app1">
<a href="" @click.prevent=" view='login' ">登陆</a>
<a href="" @click.prevent=" view='register' ">注册</a>
<!-- 使用component设置组件切换 -->
<component :is="view"></component>
</div>
<script>
// 创建登陆组件
Vue.component('login',{
template:'<h1>登陆组件</h1>'
})
// 创建注册组件
Vue.component('register',{
template:'<h1>注册组件</h1>'
})
// 创建第一个Vue的实例
var vm1 = new Vue({
el: '#app1',
data: {
view: "", // 设置切换组件的注册名称
},
})
</script>
</body>
</html>
浏览器显示如下:
-
点击登陆按钮

-
点击注册按钮

可以看到上面已经实现好了组件切换。
2.使用transition
包括component
组件,并命名name
为component-fade

3.在css
中编写component-fade
入场、出场的动画效果

此时打开浏览器查看动画效果,如下:

两个组件的切换因为位置上下占用,导致一个不平滑的过渡效果。下面的【注册组件】要等到【登陆组件】向右移动消失之后,【注册组件】才会上移。
如果想要两个内容平滑从左到右的变化,那么下面就可以设置「mode」来实现。
4.加上动画的模式mode

在mode
设置中可以设置out-in
和in-out
,这里我先设置out-in
查看效果如下:


在设置了mode
为out-in
之后,组件在切换的时候,将会等待【注册组件】消失了之后,才会开始执行【登陆组件】的动画。
那么如果设置in-out
呢?


如果使用in-out
,那么则会先让新的组件先进入,然后再让旧的组件移除,这个效果并不平滑。所以一般是设置out-in
。
交流QQ群:

点击下面,查看更多Vue系列文章
原文始发于微信公众号(海洋的渔夫):37. Vue组件切换动画以及mode效果设置
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/32446.html