Vue定义多组动画

在一个页面中,可以给多个元素添加动画效果,4.1 节中的案例是单击按钮让 div 元素从右往左过渡,本节新增元素,单击按钮让 div 元素从下往上过渡,代码如下。

视图层代码如下。

<div id="app" v-cloak>
    <input type="button" value="toggle" @click="toggleFn">
    <transition>
        <div v-if="flag">
            <h1>Hello</h1>
        </div>
    </transition>
    <hr>
    <input type="button" value="toggle" @click="toggleFn2">
    <transition name="myF">
        <div v-if="flag2">
            <h2>Hello</h2>
        </div>
    </transition>
</div>

CSS 代码如下。

<style>
    /* 动画一 */
    .v-enter,
    .v-leave-to {
        opacity: 0;
        transform: translateX(100px);
    }

    .v-enter-active,
    .v-leave-active {
        transition: all 0.5s ease;
    }

    /* 动画二 */
    .myF-enter,
    .myF-leave-to {
        opacity: 0;
        transform: translateY(100px);
    }

    .myF-enter-active,
    .myF-leave-active {
        transition: all 0.5s ease;
    }
</style>

逻辑代码如下。

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg: 'Hello World',
            flag: true,
            flag2: true,
        },
        methods: {
            toggleFn() {
                this.flag = !this.flag;
            },
            toggleFn2() {
                this.flag2 = !this.flag2;
            }
        }
    });
</script>

代码解析如下。

要做一个多次使用动画的动画,首先需要给 transition 添加 name 属性,代码为 “<transition name="myF">”。

然后使用 CSS 定义两组样式即可,同样是两个时间点和两个时间段的样式,只需要把之前的 “v-” 修改成 “myF-” 即可,myF 是自定义的属性名。

运行上述代码发现,单击不同的按钮会显示不同的动画效果。