Vuejs动画

使用transition 元素 把 需要被动画控制的元素包裹起来transition元素是vue官方提供的
分为
分为两组 ENTER 和 LEAVE
其中 分别分为
两个时间点 和 一个时间段
v-enter;v-enter-to ; v-enter-active
v-leave ;v-leave-to ; v-leave-active

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/vue.js"></script>
<!--自定义两组样式来控制transition内部的元素实现动画-->
<style>
    /* v-enter [这是一个时间点] 进入之前元素的起始状态,此时还没有开始进入*/
    /* v-leave-to [] 动画离开之后 离开的终止状态 此时,元素动画已经结束了*/
    .v-enter,
    .v-leave-to{
        opacity:0;
        transform: translateX(80px);
    }
    /*v-enter-active 入场动画的时间段*/
    /* v-leave-active 出场动画的时间段*/
    .v-enter-active,
    .v-leave-active{
        transition: all 0.4s ease;
    }
</style>
<body>
<!--需求:点击按钮让H3显示 再点击让H3隐藏-->
<div id="app">
    <input type="button" value="toggle" @click="flag=!flag">
    <!--使用transition 元素 把 需要被动画控制的元素包裹起来-->
    <!--transition元素是vue官方提供的-->
<transition>
    <h3 v-if="flag">这是一个H3</h3>
</transition>
</div>
</body>
<script>
    var vm=new Vue({
        el:'#app',
        data:{
            flag:false
        },
        methods:{

        }
    })
</script>
</html>

实现一组动画
当我们想要 一个H3 和 一个H6的时候

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/vue.js"></script>
<!--自定义两组样式来控制transition内部的元素实现动画-->
<style>
    /* v-enter [这是一个时间点] 进入之前元素的起始状态,此时还没有开始进入*/
    /* v-leave-to [] 动画离开之后 离开的终止状态 此时,元素动画已经结束了*/
    .v-enter,
    .v-leave-to{
        opacity:0;
        transform: translateX(80px);
    }
    /*v-enter-active 入场动画的时间段*/
    /* v-leave-active 出场动画的时间段*/
    .v-enter-active,
    .v-leave-active{
        transition: all 0.4s ease;
    }


    .v-enter,
    .v-leave-to{
        opacity:0;
        transform: translateY(80px);
    }

    .v-enter-active,
    .v-leave-active{
        transition: all 0.4s ease;
    }
</style>
<body>
<!--需求:点击按钮让H3显示 再点击让H3隐藏-->
<div id="app">
    <input type="button" value="toggle" @click="flag=!flag">
    <!--使用transition 元素 把 需要被动画控制的元素包裹起来-->
    <!--transition元素是vue官方提供的-->
<transition>
    <h3 v-if="flag">这是一个H3</h3>
</transition>


    <hr>

    <input type="button" value="toggle" @click="flag=!flag">
    <!--使用transition 元素 把 需要被动画控制的元素包裹起来-->
    <!--transition元素是vue官方提供的-->
    <transition>
        <h6 v-if="flag">这是一个H6</h6>
    </transition>
</div>
</body>
<script>
    var vm=new Vue({
        el:'#app',
        data:{
            flag:false
        },
        methods:{

        }
    })
</script>
</html>

现在这两组动画是相同的
现在可以通过修改V-前缀来进行两组动画的分别控制

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/vue.js"></script>
<!--自定义两组样式来控制transition内部的元素实现动画-->
<style>
    /* v-enter [这是一个时间点] 进入之前元素的起始状态,此时还没有开始进入*/
    /* v-leave-to [] 动画离开之后 离开的终止状态 此时,元素动画已经结束了*/
    .v-enter,
    .v-leave-to{
        opacity:0;
        transform: translateX(80px);
    }
    /*v-enter-active 入场动画的时间段*/
    /* v-leave-active 出场动画的时间段*/
    .v-enter-active,
    .v-leave-active{
        transition: all 0.4s ease;
    }


    .my-enter,
    .my-leave-to{
        opacity:0;
        transform: translateY(80px);
    }

    .my-enter-active,
    .my-leave-active{
        transition: all 0.4s ease;
    }
</style>
<body>
<!--需求:点击按钮让H3显示 再点击让H3隐藏-->
<div id="app">
    <input type="button" value="toggle" @click="flag=!flag">
    <!--使用transition 元素 把 需要被动画控制的元素包裹起来-->
    <!--transition元素是vue官方提供的-->
<transition>
    <h3 v-if="flag">这是一个H3</h3>
</transition>


    <hr>

    <input type="button" value="toggle" @click="flag2=!flag2">
    <!--使用transition 元素 把 需要被动画控制的元素包裹起来-->
    <!--transition元素是vue官方提供的-->
    <transition name="my">
        <h6 v-if="flag2">这是一个H6</h6>
    </transition>
</div>
</body>
<script>
    var vm=new Vue({
        el:'#app',
        data:{
            flag:false,
            flag2:false
        },
        methods:{

        }
    })
</script>
</html>

通过给transition元素添加一个name属性 此时控制他的CSS就变成了"【name】-"前缀 这样就可以实现不同动画

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容