javascript - 如何使用 Vue JS 为向导类型表单制作动画

标签 javascript css vue.js vue-component

我正在尝试用 Vue 实现一个简单的动画,但到目前为止还没有成功。我有两个 div,它们根据给定数据属性的值进行渲染

<!--Step 1-->
<div v-if="step == 1" :transition="'slide'">
  <select class="form-control"  v-model="id.category">
    <option value="null">Please Select</option>
    <option v-for="cat in cats" :value="cat.id">@{{cat.name}}</option>
  </select>
</div>

<!--Step 2-->
<div v-if="step==2" :transition="'slide'"  style="background: red">
  <select @change="fixImage(id.subcategory)" class="form-control quoteForm" v-model="id.subcategory">
    <option value="null">Please Select</option>
    <option v-for="subcat in filtered_subcat" :value="subcat.id">@{{subcat.name}}</option>
  </select>
</div>

我实际上有一个“下一步按钮”,它将增加 step 的值,然后显示相关的 div。我想创建类似幻灯片类型的效果,当用户单击“下一步”时,第 1 步向左滑动,第 2 步向内滑动。我的动画 css 如下:

.slide-fade-enter-active {
  transition: all .3s ease;
}
.slide-fade-leave-active {
  transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active below version 2.1.8 */ {
  transform: translateX(10px);
  opacity: 0;
}

有人能指出正确的方向吗?

最佳答案

将变化的内容包裹在 <transition> 中组件:

<transition name="slide-fade">
 <div v-if="step == 1">
     STEP 1 CONTENT
 </div>
</transition>

<transition name="slide-fade">
 <div v-if="step == 2">
     STEP 2 CONTENT
 </div>
</transition>

转换的名称,slide-fade ,与您提供的 CSS 匹配。由于您可能希望滑动内容重叠,因此应该具有 position: absolute 。比如内容滑出:

.slide-fade-leave-active {
  position: absolute;
  transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}

这是一个演示:

new Vue({
  el: "#app",
  data() {
    return {
        step: 1
    }
  }
});
.slide-fade-enter-active {
  transition: all .3s ease;
}
.slide-fade-leave-active {
  position: absolute;
  transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active below version 2.1.8 */ {
  transform: translateX(10px);
  opacity: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <!--Step 1-->

  <transition name="slide-fade">
    <div v-if="step == 1">
      STEP 1 CONTENT
    </div>
  </transition>

  <!--Step 2-->
  <transition name="slide-fade">
    <div  v-if="step == 2">
      STEP 2 CONTENT
    </div>
  </transition>

  <button @click="step++">
    Next >
  </button>
</div>

关于javascript - 如何使用 Vue JS 为向导类型表单制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65011228/

相关文章:

javascript - 如何编写一个 (php) Web 应用程序以向客户端发送一个 .txt 文件,其中包含客户端已插入 JS 提示框的值

javascript - TypeScript 函数继承

jquery - 使文本列表保持在页脚上方,但能够将它们滚动到撰写栏下方

javascript - map 容器正在被另一个实例重用

vue.js - vue 中的嵌套数组循环?

javascript - Bootstrap 4 选项卡中的传单 map 未更新

javascript - 如何使用 Javascript 打印表格,并且没有 DOM 交互

html - 带css的透明滚动条

html - CSS stretch bg 图像在 IE 中不起作用

javascript - Firebase 云消息传递前台通知在 Vue 中不起作用