vue 如何实现组件与组件之间的transition过渡?

发布于 2022-09-04 10:10:12 字数 1747 浏览 18 评论 0

两个组件: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);
}

demo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寄风 2022-09-11 10:10:12

解决方案:

.nav-slide-enter, .nav-slide-leave-active
{
  transform: translateY(-30px);
  opacity: 0;
  margin-bottom: -30px;
}

https://jsfiddle.net/1862k2gm/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文