9 Vue2动画

261 阅读2分钟

官方文档已经很详细了:进入/离开 & 列表过渡

实现主要就是用transition标签需要动画的元素,然后再css中给出动画样式,比如初始帧,关键帧,结束帧状态和持续方式。

transition动画,淡入淡出

官方实例:CSS 动画 需要动画展示的内容用transition标签包起来,<transition name='fade'>,其中fade就是淡入淡出

<transition name="fade">
  <p v-if="show">hello</p>
</transition>

然后再样式中定义动画的具体实现,
.fade-enter-active, .fade-leave-active定义了动画在淡入淡出的持续时间,transetion: opacity 0.5s是指透明动画持续0.5秒,如果改成transition: all 0.5s则表示所有动画持续0.5秒。
.fade-enter, .fade-leave-to分别定义了动画在淡入动画第一帧、以及淡出动画最后一帧,这是可以分开定义的,淡入动画是从.fade-enter样式到默认样式的过程;淡出动画是从默认样式到fade-leave-to的过程;
.fade-enter-to是淡入动画最后一帧,一般不需要加,即使加上效果最好与默认样式一致,否则会有跳的感觉;.fade-leave-to是淡出动画最后一帧; p是transition包起来的内容,定义了默认样式,这也是必填的(opacity:1可以省略);
API: 过渡的类名

.fade-enter-active, .fade-leave-active {
  transition: all 5s;
}
.fade-enter /* .淡入的第一帧,ade-leave-active below version 2.1.8 */
{
  opacity: 0;
  width: 100px;
  font-size: small;
}
.fade-enter-to/* .淡入的最后一帧,ade-leave-active below version 2.1.8 */
{
  opacity: 1;
  height: 200px;
  font-size: large;
}
.fade-leave-to /* 淡出的最后一帧,.fade-leave-active below version 2.1.8 */
{
  opacity: 0;
  width: 400px;
  font-size: small;
}
p{
  border: 1px solid red;
  width: 800px;
  font-size: large;
}

animation动画

官方实例:CSS 动画

<div id="example-2">
  <button @click="show2 = !show2">Toggle show</button>
  <transition name="bounce">
    <p id="p-animation" v-if="show2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris facilisis enim libero, at lacinia diam fermentum id. Pellentesque habitant morbi tristique senectus et netus.</p>
  </transition>
</div>
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
#p-animation{
  border: 1px solid red;
  width: 800px;
  font-size: large;
}

利用第三方动画库(自定义过渡的类名

1,在html中引用第三方的动画样式表

<!DOCTYPE html>
<html lang="">
  <head>
      ……
      <link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
  </head>
  <body>
    ……
  <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
  </body>
</html>

2,使用,具体有哪些预定义的类可以使用,见animate-css官网animate-cssanimate.style/

<div id="example-3">
  <button @click="show3 = !show3">
    Toggle render
  </button>
  <transition
      enter-active-class="animated tada"
      leave-active-class="animated bounceOutRight"
  >
    <p v-if="show3">hello</p>
  </transition>
</div>

JavaScript 钩子

第三方 JavaScript 动画库,如 Velocity.js,可以用钩子操作动画;
javascript动画库velocity.js文档

多个元素过渡