Vue学习小札——3.0css过渡/动画

"fade">
       
"show">hello world
复制代码

当一个元素被transition包裹之后,Vue会自动地分析元素的css样式,然后构建动画的流程。


显示:

在动画即将被执行的瞬间,会往内部的div上自动地增加两个class,分别是 fade-enter fade-enter-active。当动画第一帧执行结束之后,transition这个标签,vue知道它是一个动画效果。vue会在动画运行到第二帧的时候,vue会把之前的fade-enter去掉,再增加fade-enter-to。动画继续执行,直到结束的瞬间,vue会把fade-enter-active 和 fade-enter-to这两个class去掉。


隐藏:

vue会自动构建隐藏地动画流程,隐藏的第一个瞬间的时候,vue会自动生成两个类,分别是fade-leavefade-leave-active。第二帧的时候去掉fade-leave ,增加fade-leave-to。最后一帧,去掉fade-leave-active 和 fade-leave-to 。

所有前缀以fade- 开头是因为 name=“fade”,如果没有fade ,默认的开头是“v-”


@keyframes bounce-in {
      0% {
        transfrom: scale(0);
      }
      50% {
        transfrom: scale(1.5);
      }
      100% {
        transfrom: scale(1);
      }
    }
    .fade-enter-active {
      transform-origin: left center;
      animation: bounce-in 1s;   
    }
   
    .fade-leave-active {
       transform-origin: left center;
       animation: bounce-in 1s reverse;
    }
复制代码


在Vue中使用Animate.css库

1.必须使用自定义class形式命名来使用Animate.css

2.class类里面必须包含animated这个具体的类,然后需要根据入场效果和出场效果的不同,将类名写在第二个位置。

"fade"
        enter-active-class="animated swing"
        leave-active-class="animated shake"
        >
       
"show">hello world
复制代码


 "fade"
        appear
        enter-active-class="animated swing"
        leave-active-class="animated shake"
        appear-active-class="animated swing"
        >
       
"show">hello world
复制代码

使用appear-active-class这样自定义动画的class ,要记得在类名上再写一个appear 属性。上面例子意思是在动画第一次显示是也有 animated swing的效果。


在vue中同时使用过渡和动画

实际上Animate.css提供的动画原理就是 @keyframes 这种css3的动画效果。

过渡

.fade-enter {
       opacity: 0;
    }
    .fade-enter-active {
       transition: opacity 3s;
    }
    .fade-leave-to {
       opacity: 0;
    }
    .fade-leave-active {
       transition: opacity 3s;
    }
复制代码

"fade"
        appear
        enter-active-class="animated swing fade-enter-active"
        leave-active-class="animated shake fade-leave-active"
        appear-active-class="animated swing"
        >
       
"show">hello world
复制代码

我们定义的fade-enter-active 和 fade-leave-active 的过渡(transition)时间是3s,但是Animate.css源码里的animated动画(@keyframes)是1s。这时候要设置  type

 "fade"
        type="transition"
        appear
        enter-active-class="animated swing fade-enter-active"
        leave-active-class="animated shake fade-leave-active"
        appear-active-class="animated swing"
        >
       
"show">hello world
复制代码

意思是这里既有keyframe的动画又有transition的动画,动画时长以type里设置的动画类型为准。

也可以自定义动画播放时长

:duration="10000"
复制代码

:duration="{enter: 5000,leave:10000}"
复制代码


Vue中的Js动画与Velocity.js的结合

a.动画显示钩子

@before-enter = "handleBeforeEnter"

handleBeforeEnter: function(el) {
        //el :transition 包裹的div标签
        el.style.color = "red";
       },
复制代码

@enter = "handleEnter"

 handleEnter: function(el,done){
        //done回调函数,当动画执行结束之后,记得手动地调用done回调函数
        setTimeout(()=>{
          el.style.color = "green";
        }, 2000);
        setTimeout(()=>{
           done();
        },4000);
       },
复制代码

@after-enter = "handleAfterEnter"

handleAfterEnter: function(el) {
        el.style.color = "black";
       },
     }复制代码

b.动画消失钩子

@before-leave

@leave 

@after-leave

c.Velocity.js

       handleBeforeEnter: function(el) {
        el.style.opacity = 0;
       },
       handleEnter: function(el,done){
        Velocity(el, 
                 {opacity: 1}, 
                 {duration:1000,
                  complete:done});
       },
       handleAfterEnter: function(el) {
         alert("动画结束");
       },
复制代码


Vue中多个元素或组件的过渡

a.多个元素的过渡:

Vue在动画(在两个元素进行切换的时候)会尽量地复用dom,为了消除复用机制,给每个元素不同地的key值。

Vue在transition还提供了mode配置参数,来设置多个元素切换时的效果。

 "fade" mode="in-out">
      
"show" key="hello">hello world
"bye">bye world
复制代码

.fade-enter {
       opacity: 0;
     }
     .fade-enter-active {
       transition: opacity 1s;
     }
     .fade-leave-to {
        opacity: 0;
     }
     .fade-leave-active {
        transition: opacity 1s;
     }
复制代码

b.多个组件的过渡效果:(动态组件)


  
"app"> "fade" mode="out-in"> "type">
复制代码


Vue中的列表过渡  transition-group



  
"app">
"(item,index) of list" key="item.id"> {{item.title}}----{{item.id}}
复制代码


Vue中的动画封装


  
"app"> "show">
hello world
"show">

bye world

复制代码






你可能感兴趣的:(Vue学习小札——3.0css过渡/动画)