如何使用 Vue JS 为向导类型的表单设置动画

Posted

技术标签:

【中文标题】如何使用 Vue JS 为向导类型的表单设置动画【英文标题】:How to animate a wizard type form with Vue JS 【发布时间】:2021-03-08 16:41:11 【问题描述】:

我正在尝试用 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;

谁能指出正确的方向?

【问题讨论】:

【参考方案1】:

将变化的内容包装在&lt;transition&gt; 组件中:

<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>

【讨论】:

如果我是正确的,您甚至可以将两个 div 放在同一个 transition 元素中。

以上是关于如何使用 Vue JS 为向导类型的表单设置动画的主要内容,如果未能解决你的问题,请参考以下文章

Django:在表单向导中为步骤动态设置表单集

使用 Bootstrap PHP 表单向导插入 sql

Vue.js + Typescript:如何将@Prop 类型设置为字符串数组?

如何在EXCEL中将字符转成日期 如19970828转成1997-08-28

vue实现collapse折叠板动画,可设置动画时间,动画延迟等

使用vue学习three.js之创建动画-变形动画-通过设置morphTargetInfluences属性创建动画