vue-transition-move

<!Doctype>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .btn {
            position: fixed;
            bottom: 50px;
            right: 10px;
            z-index: 10;
            width: 50px;
            height: 50px;
            line-height: 50px;
            border-radius: 50%;
            border: none;
            outline: none;
            color: #fff;
            font-size: 18px;
            background: #5dfcff;
        }

        .menu {
            position: fixed;
            bottom: 50px;
            right: 10px;
            width: 50px;
            height: 50px;
            border-radius: 50%;
            transition: all .7s ease-in;
        }

        .menu.move-enter-active .inner {
            transform: translate3d(0, 0, 0);
            transition-timing-function: cubic-bezier(0, .57, .44, 1.97);
        }

        .menu.move-enter-active .inner-1 {
            transition-delay: .1s;
        }

        .menu.move-enter-active .inner-2 {
            transition-delay: .2s
        }

        .menu.move-enter-active .inner-3 {
            transition-delay: .3s;
        }

        .menu.move-enter .inner,
        .menu.move-leave-active .inner {
            transition-timing-function: ease-in-out
        }

        .menu.move-enter .inner-1,
        .menu.move-leave-active .inner {
            transform: translate3d(0, 60px, 0);
            transition-delay: .3s
        }

        .menu.move-enter .inner-2,
        .menu.move-leave-active .inner-2 {
            transform: translate3d(40px, 40px, 0);
            transition-delay: .2s
        }

        .menu.move-enter .inner-3,
        .menu.move-leave-active .inner-3 {
            transform: translate3d(60px, 0, 0);
            transition-delay: .1s
        }

        .inner {
            display: inline-block;
            position: absolute;
            width: 30px;
            height: 30px;
            line-height: 30px;
            border-radius: 50%;
            background: #ff495a;
            text-align: center;
            color: #fff;
            transition: all .4s;
        }

        .inner-1 {
            top: -50px;
            left: 10px;
        }

        .inner-2 {
            left: -30px;
            top: -30px;
        }

        .inner-3 {
            left: -50px;
            top: 10px
        }

    </style>
</head>
<body>
<div id="app">
    <template>
        <button @click="showMenu" class="btn">{{text}}</button>
        <transition name="move">
            <div class="menu" v-show="show">
                <div class="inner inner-1">1</div>
                <div class="inner inner-2">2</div>
                <div class="inner inner-3">3</div>
            </div>
        </transition>
    </template>
</div>
<script src="../vue.js"></script>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            show: false
        },
        methods: {
            showMenu: function () {
                this.show = !this.show;
            }
        },
        computed: {
            text: function () {
                return this.show ? '' : '';
            }
        }
    });
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/theWayToAce/p/7405925.html