Skip to content

Vue 动画

  • Vue 里面的动画有 2 种方式

  • 第一种利用动画提供的钩子函数

  • 第二种利用@keyframes 关键帧

Vue2 动画里面的钩子函数

  • 需要利用 transiton 标签
html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
            <title>
                css动画原理
            </title>
        </meta>
        <script src="./vue.js" type="text/javascript">
        </script>
        <style>
          .fade-enter,
          .fade-leave-to{
              opacity: 0;
          }
          .fade-enter-active,
          .fade-leave-active{
            transition: opacity 1s;
          }
        </style>
    </head>
    <body>
        <div id="app">
            <transition name='fade'>
                <div v-show="show">
                    content
                </div>
            </transition>
            <button @click="handleClick">
                切换
            </button>
        </div>
        <script>
            var app=new Vue({
            el:"#app",
            data:{
              show:true
            },
            methods:{
              handleClick:function(event){
                this.show=!this.show;
                // event.preventDefault();//阻止了,但是由于点击事件位置的变化,所以效果未成功。
              }
            },
            mounted:function(){
              document.onselectstart = function(){return false;};
            }
          })
        </script>
    </body>
</html>
  • 使用 keyframes
html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
            <title>
                css动画原理keyframes
            </title>
        </meta>
        <script src="./vue.js" type="text/javascript">
        </script>
        <style>
        @keyframes bounce-in{
          0%{
            transform: scale(0);
          }
          50%{
            transform: scale(1.5);
          }
          100%{
            transform: scale(1);
          }
        }
          .in{
            transform-origin: left center;
            animation: bounce-in 1s;
          }
          .out{
            transform-origin: left center;
            animation: bounce-in 1s reverse;
          }
        </style>
    </head>
    <body>
        <div id="app">
            <transition enter-active-class='in' leave-active-class='out'>
                <div v-show="show">
                    content
                </div>
            </transition>
            <button @click="handleClick">
                切换
            </button>
        </div>
        <script>
            var app=new Vue({
            el:"#app",
            data:{
              show:true
            },
            methods:{
              handleClick:function(event){
                this.show=!this.show;
                // event.preventDefault();//阻止了,但是由于点击事件位置的变化,所以效果未成功。
              }
            },
            mounted:function(){
              document.onselectstart = function(){return false;};
            }
          })
        </script>
    </body>
</html>