【问题标题】:How to slide-transition two components in Vue.js如何在 Vue.js 中滑动转换两个组件
【发布时间】:2019-11-14 09:11:30
【问题描述】:

我正在尝试创建一个 Vue.js 过渡,其中一个组件滑入而另一个组件滑出。我目前有新的组件组件以我想要的方式滑动,但我一直无法让旧组件滑出。

我想要的过渡效果类似于TakeCareOf 的过渡效果。

    <transition name="slide-fade">
      <reservation-step step="1" :showBack="false">
        <space-selection/>
      </reservation-step>
    </transition>

    <transition name="slide-fade">
      <reservation-step step="2">
        <reservation-type/>
      </reservation-step>
    </transition>

    <transition name="slide-fade">
      <reservation-step step="3">
        <date-selection/>
      </reservation-step>
    </transition>



<style lang='scss'>
.slide-fade-enter-active,
.slide-fade-leave-active {
  transition: all 1s 0.2s;
}
.slide-fade-enter, .slide-fade-leave-active
/* .slide-fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}
.slide-fade-enter {
  transform: translateX(100px);
}
.slide-fade-leave-active {
  transform: translateX(-100px);
}
</style>

【问题讨论】:

    标签: javascript css vue.js css-transitions


    【解决方案1】:

    这比 vue.js 更像是一个 css 动画问题,但我希望这个例子对你有所帮助。 On JSFiddle 。更多信息请查看官方vue translations documentation

    模板

    <link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
    <div id="transition-components-demo">
    
    <p>A <input name="component" type="radio" value="v-a" v-model="view"></p>
    <p>B <input name="component" type="radio" value="v-b" v-model="view"></p>
    
    <transition 
        name="slide"
    >
      <component v-bind:is="view"></component>
    </transition>
    
    </div>
    

    vue 代码

    new Vue({
      el: '#transition-components-demo',
      data: {
        view: 'v-a',
      },
      components: {
        'v-a': {
          template: '<div>Компонент А</div>'
        },
        'v-b': {
          template: '<div>Компонент Б</div>'
        }
      }
    })
    

    css 动画

    .slide-leave-active,
    .slide-enter-active {
      transition: 1s;
    }
    .slide-enter {
      transform: translate(100%, 0);
    }
    .slide-leave-to {
      transform: translate(-100%, 0);
    }
    

    【讨论】:

    • 这几乎是正确的。但是你错过了一点。旧组件仍然可见,而新组件已经滑入。一旦旧组件完全从 DOM 中删除,新组件就会“向上跳跃”。您需要应用更多位置:固定魔法,如下所述:stackoverflow.com/questions/59344324/…
    • @Robert 他的回答是完全正确的。您的用例只要求您应用 max-height:0 和 opacity:0 并且它会按您的意愿工作。
    猜你喜欢
    • 2018-06-28
    • 2019-02-09
    • 1970-01-01
    • 2023-03-23
    • 2019-06-12
    • 2021-02-20
    • 2017-08-03
    • 2017-04-16
    • 2018-10-31
    相关资源
    最近更新 更多