zoukankan      html  css  js  c++  java
  • 浅谈Vue中的动画

    使用transition标签

    <!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

    <!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>

    使用animate.css

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    css动画原理animate.css
                </title>
            </meta>
            <link rel="stylesheet" href="./animate.css">
            <script src="./vue.js" type="text/javascript">
            </script>
        </head>
        <body>
            <div id="app">
                <transition enter-active-class="animated swing" leave-active-class="animated shake">
                    <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>

    animat加过渡的一些问题

       type="transition"  //用于选择动画的持续时间是过渡的时间

      :duration="10000"       //自定义动画时长

      :duration="{enter:5000,leave:10000}"  //动画进入时长和离开时长

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    css动画原理animate.css第一次显示和加过渡
                </title>
            </meta>
            <link rel="stylesheet" href="./animate.css">
            <script src="./vue.js" type="text/javascript">
            </script>
            <style>
             .fade-enter,
              .fade-leave-to{
                  opacity: 0;
              }
              .fade-enter-active,
              .fade-leave-active{
                transition: opacity 3s;
              }      
            </style>
        </head>
        <body>
            <div id="app">
                <transition name="fade" :duration="{enter:5000,leave:10000}" enter-active-class="animated swing fade-enter-active" leave-active-class="animated shake fade-leave-active" appear appear-active-class="animated swing">
                    <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>

    js动画

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    js动画与velocity.js
                </title>
            </meta>
            <link href="./animate.css" rel="stylesheet">
                <script src="./vue.js" type="text/javascript">
                </script>
                <script src="./velocity.min.js" type="text/javascript"></script>
            </link>
        </head>
        <body>
            <div id="app">
                <transition @after-enter="handleAfterEnter" @before-enter="handleBeforeEnter" @enter="handleEnter" 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();//阻止了,但是由于点击事件位置的变化,所以效果未成功。
                  },
                  handleBeforeEnter:function(el){
                    el.style.color="red"; 
                   
                  },
                   handleEnter:function(el,done){
                    setTimeout(()=>{
                      el.style.color="green"; 
                    },2000)
                     setTimeout(()=>{
                      done();
                    },4000)
                   
                  },
                   handleAfterEnter:function(el,done){               
                      el.style.color="black";                               
                  },
    
                },
                mounted:function(){
                  document.onselectstart = function(){return false;};
                }     
              })
            </script>
        </body>
    </html>
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    js动画与velocity.js
                </title>
            </meta>
            <link href="./animate.css" rel="stylesheet">
                <script src="./vue.js" type="text/javascript">
                </script>
                <script src="./velocity.min.js" type="text/javascript"></script>
            </link>
        </head>
        <body>
            <div id="app">
                <transition @after-enter="handleAfterEnter" @before-enter="handleBeforeEnter" @enter="handleEnter" 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();//阻止了,但是由于点击事件位置的变化,所以效果未成功。
                  },
                  handleBeforeEnter:function(el){
                   el.style.opacity=0;               
                  },
                   handleEnter:function(el,done){
                    Velocity(el,{
                      opacity:1
                    },{
                      duration:1000,
                      complete:done
                    })               
                  },
                   handleAfterEnter:function(el,done){               
                          alert("end")                     
                  },
    
                },
                mounted:function(){
                  document.onselectstart = function(){return false;};
                }     
              })
            </script>
        </body>
    </html>

    mode in-out out-in

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    js动画 元素
                </title>
            </meta>
            <link href="./animate.css" rel="stylesheet">
                <script src="./vue.js" type="text/javascript">
                </script>
                <style>
                    .fade-enter,
              .fade-leave-to{
                  opacity: 0;
              }
              .fade-enter-active,
              .fade-leave-active{
                transition: opacity 3s;
              }
                </style>
            </link>
        </head>
        <body>
            <div id="app">
                <transition name="fade" mode="out-in">
                    <div v-if="show" key="start">
                        start
                    </div>
                    <div v-else key="end">
                        end
                    </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>

    组件中的动画

     <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    js动画 组件
                </title>
            </meta>
            <link href="./animate.css" rel="stylesheet">
                <script src="./vue.js" type="text/javascript">
                </script>
                <style>
                    .fade-enter,
              .fade-leave-to{
                  opacity: 0;
              }
              .fade-enter-active,
              .fade-leave-active{
                transition: opacity 3s;
              }
                </style>
            </link>
        </head>
        <body>
            <div id="app">
                <transition mode="out-in" name="fade">
                    <component :is="type"></component>
                </transition>
                <button @click="handleClick">
                    切换
                </button>
            </div>
            <script>
                Vue.component("child-one",{
                template:"<div>child-one</div>"
              })
                Vue.component("child-two",{
                template:"<div>child-two</div>"
              })
                var app=new Vue({
                el:"#app", 
                data:{
                  type:"child-one"
                },
                methods:{
                  handleClick:function(event){
                    this.type=this.type==='child-one'?"child-two":"child-one";
                  },
                },
                mounted:function(){
                  document.onselectstart = function(){return false;};
                }     
              })
            </script>
        </body>
    </html>

    列表过渡

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    列表过渡
                </title>
            </meta>
            <link href="./animate.css" rel="stylesheet">
            </link>
            <script src="./vue.js" type="text/javascript">
            </script>
            <style>
                .v-enter,
                .v-leave-to{
                    opacity: 0;
                }
                .v-enter-active,
                .v-leave-active{
                  transition: opacity 3s;
                }
            </style>
        </head>
        <body>
            <div id="app">
                <transition-group>
                    <div :key="item.id" v-for="(item,index) of list">
                        {{item.title}}
                    </div>
                </transition-group>
                <button @click="handleClick">
                    Add
                </button>
            </div>
            <script>
                var count=0;
                var app=new Vue({
                el:"#app", 
                data:{
                  list:[]
                },
                methods:{
                  handleClick:function(event){
                    this.list.push({
                      id:count++,
                      title:"content"
                    })
                  },
                },
                mounted:function(){
                  document.onselectstart = function(){return false;};
                }     
              })
            </script>
        </body>
    </html>

    动画封装

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
                <title>
                    动画封装
                </title>
            </meta>
            <script src="./vue.js" type="text/javascript">
            </script>
        </head>
        <body>
            <div id="app">
                <fade v-show="show">
                    <div>
                        content
                    </div>
                </fade>
                <fade v-show="show">
                    <div>
                        content
                    </div>
                </fade>
                <button @click="handleClick">
                    切换
                </button>
            </div>
            <script>
                Vue.component("fade",{
                  props:["show"],
                  template:`
                    <transition @before-enter="handleBeforeEnter" @enter="handleEnter" @after-enter="handleAfterEnter">
                        <slot v-show="show"></slot>
                    </transition>
                    `,
                    methods:{
                      handleBeforeEnter:function(el){
                        el.style.color="red";               
                      },
                      handleEnter:function(el,done){
                        setTimeout(()=>{
                          el.style.color="green"; 
                        },2000)
                        setTimeout(()=>{
                          done();
                        },4000)
                      },
                      handleAfterEnter:function(el,done){   
                      el.style.color="black";                                 
                      },
                    }
                })
                var app=new Vue({
                el:"#app", 
                data:{
                  show:false
                },
                methods:{
                  handleClick:function(event){
                    this.show=!this.show;
                  },
                  
                }, 
              })
            </script>
        </body>
    </html>

    当然关于动画的内容还有很多,其余更深入的部分可以观看:https://cn.vuejs.org/v2/guide/transitioning-state.html

  • 相关阅读:
    C# 数据处理——(包括但不限)浮点数设置小数点后位数 (转)
    c#下怎么判断一个字符串是否可以转换为double类型(转)
    C++ string字符串按分隔符分割成一个数组(转)
    C#浮点数保留位(转)
    linq与lambda写法对照(转)
    C# DataTable 和List之间相互转换的方法(转)
    c#写入Mysql中文显示乱码 解决方法(转)
    微博营销之企业微博运营方案实用篇
    “最美店主”走红网络,或成国内欧美第一店
    月饼西施PK愤怒的小鸟,这个中秋狂掀DIY风
  • 原文地址:https://www.cnblogs.com/tllw/p/9566163.html
Copyright © 2011-2022 走看看