Vue动画

Vue中的动画

为什么要有动画:动画能够提高用户的体验,帮助用户更好的理解页面中的功能;
Vue 中也有动画,不过远没有 css3 中的那么炫酷。只能有一些简单的变换,但是却可以配合第三方css动画库完成炫酷的变换。

使用过渡类名

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

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

    使用第三方 CSS 动画库

  4. 导入动画类库:
    1
    <link rel="stylesheet" type="text/css" href="./lib/animate.css">
  5. 定义 transition 及属性:
    1
    2
    3
    4
    5
    6
    <transition
    enter-active-class="fadeInRight"
    leave-active-class="fadeOutRight"
    :duration="{ enter: 500, leave: 800 }">
    <div class="animated" v-show="isshow">我会动</div>
    </transition>

    使用动画钩子函数

  6. 定义 transition 组件以及三个钩子函数:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div id="app">
    <input type="button" value="切换动画" @click="isshow = !isshow">
    <transition
    @before-enter="beforeEnter"
    @enter="enter"
    @after-enter="afterEnter">
    <div v-if="isshow" class="show">OK</div>
    </transition>
    </div>
  7. 定义三个 methods 钩子方法:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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;
    }
    }
  8. 定义动画过渡时长和样式:
    1
    2
    3
    .show{
    transition: all 0.4s ease;
    }

上次更新 2021-02-04