vue 如何实现组件与组件之间的transition过渡?
两个组件:nav导航栏组件,panel内容组件
需求:
nav组件第二层导航的显示/隐藏(过渡效果),已实现。
nav与panel组件的过渡效果, 未实现。
说明:
nav组件内部的DOM变化使得整个页面高度发生了变化,从而使nav下面的组件的
offsetTop
的变化都在瞬间,显得很突兀Vue文档中说明了触发
transition
需要v-if
,v-for
,或者DOM跟新。在这里是通过组件内部DOM的变化来触发组件与组件之间的过渡,感觉也应该是可以的啊,但是我没实现成功,是我理解的有问题吗?
<div id="app">
<transition-group name="slide">
<navigation key="nav" class="nav"></navigation>
<panel key="panel" class="panel"></panel>
</transition-group>
</div>
Vue.component('navigation', {
template: '\
<section>\
<div class="floor">\
导航第一行\
<button @click="second = !second">show</button>\
</div>\
<transition name="nav-slide">\
<div v-if="second" class="floor floor-2">\
导航第二行\
</div>\
</transition>\
</section>\
',
data() {
return {
second: false,
};
},
})
Vue.component('panel', {
template: '<section>内容</section>',
})
new Vue ({
el: '#app',
})
div {
text-align: center;
color: #fff;
}
.nav .floor {
background: #ec8442;
height: 30px;
}
.nav .floor button {
right:10px;
position: absolute;
}
.panel {
height: 100px;
background: #42c1ec;
padding-top: 20px;
}
.floor-2 {
transition: all 0.8s
}
.nav-slide-enter, .nav-slide-leave-active {
opacity: 0;
transform: translateY(-30px);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决方案:
https://jsfiddle.net/1862k2gm/