美文网首页
动画5——组件切换动画和mode属性

动画5——组件切换动画和mode属性

作者: 小丘啦啦啦 | 来源:发表于2019-04-25 09:37 被阅读0次

一、组件切换动画
多个组件的动画过渡,只需要用transition包裹(动态组件),不需要使用key特性。
<transition></transition>元素有一个mode属性,用于设置动画过渡效果。

  • 默认是同时进行元素的进入和离开。元素绝对定位position: absolute;不会有错位问题。
  • in-out,新元素先进行过渡进入,完成之后当前元素过渡离开。
  • out-in,当前元素先过渡离开,完成之后新元素过渡进入。

注意:此过渡模式是建立在多组件切换的基础上的,也就是动态组件切换。

二、实例
实现组件之间平滑过渡切换,先原来组件消失后再新组件进入。

<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        .v-enter,.v-leave-to{
            opacity: 0;
            transform: translateX(140px);
        }
        .v-enter-active,.v-leave-active{
            transition: all 0.5s ease;
        }
    </style>
</head>

<body>
    <div id='app'>
        <a href="" @click.prevent="templName='sign'">登陆</a>
        <a href="" @click.prevent="templName='register'">注册</a>
        <transition mode="out-in">
            <component :is="templName"></component>
        </transition>
    </div>
    <template id="templ1">
        <h2>登陆组件页面</h2>
    </template>
    <template id="templ2">
        <h2>注册组件页面</h2>
    </template>
    <script>
        Vue.component('sign', {
            template: '#templ1',
        });
        Vue.component('register', {
            template: '#templ2',
        });
        var vm = new Vue({
            el: "#app",
            data: {
                templName: 'sign'
            }
        });
    </script>
</body>

</html>

三、非组件切换使用mode属性
如果是直接在<transition></transition>中写入两个元素,不同属性可以不用管;如果是同种标签,需要给每个元素加key以区分元素,否则Vue机制会为了性能使用同一个元素,不跟换整个元素而是只改变值。
如果是单独的两个标签之间切换,同元素需要设置key(经测试同为input元素,但只要类型type不同,如button和text,也认为是不同元素)。

<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <style>
            .v-enter,.v-leave-to{
                opacity: 0;
                transform: translateX(140px);
            }
            .v-enter-active,.v-leave-active{
                transition: all 0.5s ease;
            }
            h1{
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div id='app'>
            <transition mode="out-in">
                <input type="button" value="on" @click="flg=!flg" v-if="flg" key="btn1">
                <input type="button" value="off" @click="flg=!flg" v-else="flg" key="btn2">
            </transition>
        </div>
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
                    flg:true
                },
            });
        </script>
    </body>
</html>

相关文章

网友评论

      本文标题:动画5——组件切换动画和mode属性

      本文链接:https://www.haomeiwen.com/subject/nlfngqtx.html