欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue中的动画

程序员文章站 2022-05-03 20:03:33
...

为什么要有动画:动画能够提高用户的体验,帮助用户更好的理解页面中的功能;

使用过渡类名

  1. HTML结构:
   <div id="app">
        <input type="button" value="动起来" @click="myAnimate">
        <!-- 使用 transition 将需要过渡的元素包裹起来 -->
        <transition name="fade">
          <div v-show="isshow">动画哦</div>
        </transition>
      </div>
  1. VM 实例:
 // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {
        isshow: false
      },
      methods: {
        myAnimate() {
          this.isshow = !this.isshow;
        }
      }
    });
  1. 定义两组类样式
/* 定义进入和离开时候的过渡状态 */
    .fade-enter-active,
    .fade-leave-active {
      transition: all 0.2s ease;
      position: absolute;
    }

    /* 定义进入过渡的开始状态 和 离开过渡的结束状态 */
    .fade-enter,
    .fade-leave-to {
      opacity: 0;
      transform: translateX(100px);
    }

使用第三方 CSS 动画库

  1. 导入动画类库:
  1. 定义 transition 及属性:
   <transition
    	enter-active-class="fadeInRight"
        leave-active-class="fadeOutRight"
        :duration="{ enter: 500, leave: 800 }">
      	<div class="animated" v-show="isshow">动画哦</div>
    </transition>

使用动画钩子函数

  1. 定义 transition 组件以及三个钩子函数:
  1. 定义三个 methods 钩子方法:
   methods: {
            beforeEnter(el) { // 动画进入之前的回调
              el.style.transform = 'translateX(500px)';
            },
            enter(el, done) { // 动画进入完成时候的回调
              el.offsetWidth;
              el.style.transform = 'translateX(0px)';
              done();
            },
            afterEnter(el) { // 动画进入完成之后的回调
              this.isshow = !this.isshow;
            }
          }
  1. 定义动画过渡时长和样式:
   .show{
          transition: all 0.4s ease;
        }

v-for 的列表过渡

  1. 定义过渡样式:
   <style>
        .list-enter,
        .list-leave-to {
          opacity: 0;
          transform: translateY(10px);
        }
    
        .list-enter-active,
        .list-leave-active {
          transition: all 0.3s ease;
        }
    </style>
  1. 定义DOM结构,其中,需要使用 transition-group 组件把v-for循环的列表包裹起来:
<div id="app">
    <input type="text" v-model="txt" @keyup.enter="add">

    <transition-group tag="ul" name="list">
      <li v-for="(item, i) in list" :key="i">{{item}}</li>
    </transition-group>
  </div>
  1. 定义 VM中的结构:

     // 创建 Vue 实例,得到 ViewModel
     var vm = new Vue({
       el: '#app',
       data: {
         txt: '',
         list: [1, 2, 3, 4]
       },
       methods: {
         add() {
           this.list.push(this.txt);
           this.txt = '';
         }
       }
     });
    

列表的排序过渡

组件还有一个特殊之处。不仅可以进入和离开动画,还可以改变定位。要使用这个新功能只需了解新增的 v-move 特性,它会在元素的改变定位的过程中应用。

  • v-move 和 v-leave-active 结合使用,能够让列表的过渡更加平缓柔和:
 .v-move{
      transition: all 0.8s ease;
    }
    .v-leave-active{
      position: absolute;
    }