zoukankan      html  css  js  c++  java
  • vue中的js动画与Velocity.js结合

    vue里面除了用css写动画,还可以用js写动画,vue的transition中,定义了几个动画钩子
    第一个动画钩子:@before-enter
    <div id='app'>
      <transition
        @before-enter='handleBeforeEnter'
      >
        <div v-if='show'>hello world</div>
      </transition>
      <button @click='handleClick'>切换</button>
    </div>
    
    <script>
    var vm = new Vue({
      el:'#app',
      data:{
        show:true
      },
      methods:{
        handleClick:function(){
          this.show = !this.show;
        },
        handleBeforeEnter:function(el){
          el.style.color='red'
        }
      }
    })
    </script>
    在vue的transition中,在显示数据前,会自动触发before-enter这个事件,比如上面
    第二个动画钩子:@enter
    <div id='app'>
      <transition
        @before-enter='handleBeforeEnter'
        @enter='handleEnter'
      >
        <div v-if='show'>hello world</div>
      </transition>
      <button @click='handleClick'>切换</button>
    </div>
    <script>
    var vm = new Vue({
      el:'#app',
      data:{
        show:true
      },
      methods:{
        handleClick:function(){
          this.show = !this.show;
        },
        handleBeforeEnter:function(el){
          el.style.color='red'
        },
        handleEnter:function(el,done){
          setTimeout(function(){
            el.style.color='green';
            done();
          },2000);
        }
      }
    })
    </script>
    在执行动画的时候,会触发@enter这个事件,我们大部分动画流程都是写在这里吗,这个事件跟@before-enter,有点不一样的地方就是,多了一个参数done,在执行完后,回调一下done(),告诉vue,动画执行完了,vue好执行下一个钩子函数
    第三个钩子函数:@after-enter
    <div id='app'>
      <transition
        @before-enter='handleBeforeEnter'
        @enter='handleEnter'
        @after-enter='handleAfterEnter'
      >
        <div v-if='show'>hello world</div>
      </transition>
      <button @click='handleClick'>切换</button>
    </div>
    
    <script>
    var vm = new Vue({
      el:'#app',
      data:{
        show:true
      },
      methods:{
        handleClick:function(){
          this.show = !this.show;
        },
        handleBeforeEnter:function(el){
          el.style.color='red'
        },
        handleEnter:function(el,done){
          setTimeout(function(){
            el.style.color='green';
          },2000);
          setTimeout(function(){
            done();
          },4000)
        },
        handleAfterEnter:function(el){
          el.style.color='black'
        }
      }
    })
    </script>
    @after-enter在动画执行完后的处理



    同理,有入场动画,就有出场动画
    分别是before-leave,leave,after-leave
    有了这些基础后,就可以写更复杂的动画效果了,我们可以引入一个库,叫做velocity.js
    http://velocityjs.org/
    打开velocity的官网,下载下来到本地

    栗子:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="./vue.js"></script>
        <script src="../velocity.js"></script>
      </head>
    <body>
    <div id='app'>
      <transition
        @before-enter='handleBeforeEnter'
        @enter='handleEnter'
        @after-enter='handleAfterEnter'
      >
        <div v-if='show'>hello world</div>
      </transition>
      <button @click='handleClick'>切换</button>
    </div>
    
    <script>
    var vm = new Vue({
      el:'#app',
      data:{
        show:true
      },
      methods:{
        handleClick:function(){
          this.show = !this.show;
        },
        handleBeforeEnter:function(el){
          el.style.opacity=0;
        },
        handleEnter:function(el,done){
          Velocity(el,{
            opacity:1
          },{
            duration:1000,
            complete:done
          })
        },
        handleAfterEnter:function(el){
          console.log('动画结束')
        }
      }
    })
    </script>
    </body>
    </html>  
    这里就用了Velocity来实现这个动画效果,通过这个可以写出非常酷炫的动画
  • 相关阅读:
    DLL编写中extern “C”和__stdcall的作用
    spring mvc controller中的异常封装
    springMVC 【@response 返回对象自动变成json并且防止乱码】 & 【配置支持实体类中的@DateTimeFormat注解】
    Eclipse中修改SVN用户名和密码方法
    Maven
    j2ee、mvn、eclipse、Tomcat等中文乱码问题解决方法
    maven生成jar包
    windows超过最大连接数解决命令
    spring 国际化-i18n
    springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用
  • 原文地址:https://www.cnblogs.com/wzndkj/p/9689353.html
Copyright © 2011-2022 走看看