如何让VueJS在彼此之间过渡Divs?

时间:2018-10-09 21:43:12

标签: vue.js animate.css

将Vue过渡与左右滑动幻灯片一起使用时,如何使Divs彼此相邻?

看看这支笔; https://codepen.io/anon/pen/jeBBaB

HTML

<div class="heading">
  <h1>Transition demo</h1>
  <h4>Why this no work?</h4>
</div>

<div class="container" id="app">

    <transition :enter-active-class="enterAnimation" :leave-active-class="leaveAnimation" mode="">

      <div key="one" v-if="currentStep == 1">
        This is Step One
      <button class="btn btn-primary" @click="currentStep = 2; previousStep=1">Next</button>
      </div>

        <div key="two" v-else>
        This is Step Two
      <button class="btn btn-primary" @click="currentStep = 1; previousStep=2">Back</button>
      </div>

  </transition>

</div>

CSS

$purple: #5c4084;

body {
  background-color: $purple;
  padding: 50px;
}
.container {
  padding: 40px 80px 15px 80px;
  background-color: #fff;
  border-radius: 8px;
  max-width: 800px;
}
.heading {
  text-align: center;
  h1 {
    background: -webkit-linear-gradient(#fff, #999);
    -webkit-text-fill-color: transparent;
    -webkit-background-clip: text;
    text-align: center;
    margin: 0 0 5px 0;
    font-weight: 900;
    font-size: 4rem;
    color: #fff;
  }
  h4 {
    color: lighten(#5c3d86,30%);
    text-align: center;
    margin: 0 0 35px 0;
    font-weight: 400;
    font-size: 24px;
  }
}
.btn{
  outline: none !important;
}
.btn.btn-primary {
  background-color: $purple;
  border-color: $purple;
  outline: none;
  &:hover {
    background-color: darken($purple, 10%);
    border-color: darken($purple, 10%);
  }
  &:active, &:focus {
    background-color: lighten($purple, 5%);
    border-color: lighten($purple, 5%);
  }
  & .fa {
    padding-right: 4px;
  }
}
.form-group {
  margin-bottom: 25px;
}

JS

new Vue({
  el: '#app',
  data: {
    currentStep: 1,
    previousStep: 0
  },
  computed:{
      enterAnimation() {
        if (this.currentStep < this.previousStep) {
          return "animated slower fadeInLeft";
        } else {
          return "animated slower fadeInRight";
        }
      },
      leaveAnimation() {
        if (this.currentStep > this.previousStep) {
          return "animated slower fadeOutLeft";
        } else {
          return "animated slower fadeOutRight";
        }
      }
  }
});

在不使用任何模式的情况下,“进入” div会显示在“离开” div下方的行中,直到结束,然后向上弹出。

我可以使用mode =“ out-in”,但是Divs之间有明显的差距。我只想一个滑入,紧挨着一个滑入。有什么办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以在div元素上使用绝对定位,但是您需要稍微调整css。

但是,作为起点,将您的.container规则更改为此(添加位置:相对;):

.container {
padding: 40px 80px 15px 80px;
background-color: #fff;
border-radius: 8px;
max-width: 800px;
position:relative;
}

并将其添加为新规则:

.container div {position:absolute;top:0;left:0;}

弹性框方式:

将您的容器规则更改为此:

.container {
padding: 40px 80px 15px 80px;
background-color: #fff;
border-radius: 8px;
max-width: 800px;
display:flex;
}

此后,您可以使用CSS转换规则来定位内容。您可以在此处看到一个有效的示例:

Vue transitions