• 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来实现这个动画效果,通过这个可以写出非常酷炫的动画
  • 相关阅读:
    Linq之Lambda表达式初步认识
    Linq之Expression高级篇(常用表达式类型)
    nginx: [emerg] bind() to 0.0.0.0:443 failed(98:Address already in use)解决方法
    ubuntu18.04如何查看,关闭,激活虚拟机的防火墙
    Dictionary 不区分大小写
    Zookeeper 3、Zookeeper工作原理(详细)
    查看Navicat已保存数据库密码
    is not allowed to connect to this mysql server
    error while loading shared libraries: libstdc++.so.6: cannot open shared obj
    [转]Linux网络配置命令ifconfig输出信息解析
  • 原文地址:https://www.cnblogs.com/wzndkj/p/9689353.html
Copyright © 2020-2023  润新知