(23)Vue 中的动画特效——② 在 Vue 中使用 Animate.css 库 | Vue 基础理论实操

5,815 阅读2分钟
本文版权归 “公众号 | 前端一万小时” 所有,欢迎转载!

转载请注明出处,未经同意,不可修改文章内容。

🔥🔥🔥本系列文章已在“公众号 | 前端一万小时”更新完毕,有需要的小伙伴可按需前往查看。

🔥🔥🔥“前端一万小时”两大明星专栏——“从零基础到轻松就业”、“前端面试刷题”,已于本月大改版,合二为一,干货满满,欢迎点击公众号菜单栏各模块了解。


本节将学习更复杂的 Vue 中的 CSS 动画的使用。 接上一篇文章的代码,继续了解 Animate.css 动画库的使用:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>前端一万小时-在 Vue 中使用 Animate.css 库</title>
  <script src="./vue.js"></script>
  <style>
    .fade-enter,
    .fade-leave-to {
      opacity: 0;
    }

    .fade-enter-active,
    .fade-leave-active {
      transition: opacity 1s;
    }
  </style>
</head>
<body>
  <div id="root">
    <transition name="fade">
      <div v-if="show">Hello,前端一万小时</div>
    </transition>
    <button @click="handleClick">切换</button>
  </div>

  <script>
    var vm = new Vue({
      el: "#root",
      data: {
        show: true
      },
      methods: {
        handleClick: function() {
          this.show = !this.show
        }
      }
    })
  </script>
</body>
</html>

1 keyframes

在上一篇中,我们只做了一个过渡动画效果。

现在来了解在 Vue 中如何使用 keyframes 这种形式的动画。

再复习一下 .fade-enter-active.fade-leave-active 什么时候生效:

  1. 当 div 在显示的过程中,.fade-enter-active 一直存在;
  2. 当 div 在隐藏的过程中,.fade-leave-active 一直存在。

记住了这个特性,可以这样来改写代码:

  <style>
    @keyframes bounce-in { /* 2️⃣定义一个名叫 bounce-in 的 keyframes(CSS3 动画); */
      
      0% { /* 2️⃣-①:当元素 0% 时,scale(大小)是原来的 0 倍; */
        transform:: scale(0); 
      }
      
      50% { /* 2️⃣-②:当元素 50% 时,是原来大小的 1.5 倍; */
        transform: scale(1.5);  
      }
      
      100% { /* 2️⃣-③:当元素 100% 时,恢复原来大小。 */
        transform: scale(1);  
      }
    }

    /* 1️⃣把 .fade-enter-active 和 .fade-leave-active 分开,同时里面的样式内容都去掉; */
    .fade-enter-active {
      
      transform-origin: left center; /* 4️⃣动画以左边中心为原点。 */
      
      animation: bounce-in 1s; /* 3️⃣-①:使用 bounce-in 动画,让它在 1 秒钟运行结束; */
    }

    .fade-leave-active {
      transform-origin: left center;
      animation: bounce-in 1s reverse; /*
      																 3️⃣-②:使用 bounce-in 动画,
      																 让它在 1 秒钟反向运行结束;
      																	*/
    }
  </style>

保存后,刷新网页查看效果:点击“切换”按钮后,隐藏/显示都有放大缩小的动画效果。

vue_23-01.gif

2 自定义 transition 类名

当使用 transition 标签时给它起名为“fade”, Vue 就会自动在标签上添加 .fade-enter-active.fade-leave-active 的类名。

❓如何让 transition 动画的类名短一些? 比如变成 .enter.leave

答:可以在 transition 标签上自定义类名。

比如要自定义 .fade-enter-active 类名为“enter”,只需要在 transition 标签上添加 enter-active-class="enter"

<head>
  <style>
    @keyframes bounce-in {
      0% {
        transform:: scale(0);
      }
      50% {
        transform: scale(1.5);
      }
      100% {
        transform: scale(1);
      }
    }

    /* 2️⃣把样式中的类名进行更改。 */
    .enter {
      transform-origin: left center;
      animation: bounce-in 1s;
    }

    .leave {
      transform-origin: left center;
      animation: bounce-in 1s reverse;
    }
  </style>
</head>
<body>
  <div id="root">
    
    <!-- 1️⃣自定义 enter、leave 的类名; -->
    <transition name="fade" enter-active-class="enter" leave-active-class="leave">
      <div v-if="show">Hello,前端一万小时</div>
    </transition>
    <button @click="handleClick">切换</button>
  </div>

保存后,返回刷新页面查看,动画效果依然正常:

vue_23-02.gif

3 Animate.css 库

借助自定义类名的功能,我们就可以在 Vue 项目中使用 Animate.css 库了。

打开 Animate.css 官网,可以看到它提供了非常多的 CSS 动画效果:

vue_23-03.gif

使用 Animate.css 库非常简单:

1️⃣点击 Download Animate.css 下载 Animate.css 文件至本地: vue23-04.png

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>前端一万小时-在 Vue 中使用 Animate.css 库</title>
  <script src="./vue.js"></script>
  <link rel="stylesheet" href="./animate.css"> <!-- 2️⃣在代码中引入 animate.css,
                                               并删除我们自己写的动画样式; -->
</head>
<body>
  <div id="root">
    
    <transition 
      name="fade"
      enter-active-class="animated swing"
      leave-active-class="animated shake"
    > <!-- 3️⃣隐藏/显示动画的类名上,都一定要有 animated:
      加 animated 的意思是“我使用 Animate.css 库里的动画效果”。
      
      4️⃣分别给显示/隐藏动画加上具体的效果名;
      4️⃣-①:显示用上下抖动的动画效果 swing;
      4️⃣-②:隐藏用左右抖动的动画效果 shake。
      -->
     
      <div v-if="show">Hello,前端一万小时</div>
    </transition>
    <button @click="handleClick">切换</button>
  </div>

  <script>
    var vm = new Vue({
      el: "#root",
      data: {
        show: true
      },
      methods: {
        handleClick: function() {
          this.show = !this.show
        }
      }
    })
  </script>
</body>
</html>

保存后,返回页面查看使用了 Animate.css 库的效果:

vue_23-05.gif

使用 Animate.css 动画库有什么好处?

答:如果不想自己去写上面所讲的 keyframes、transition 等动画效果的代码,或是需要一些比较复杂的 CSS 动画效果时,就可以选择使用 Animate.css 库提供的动画效果。

使用 Animate.css 动画库有没有什么需要注意的问题?

答:

  1. 必须使用自定义 class 名字的形式来使用 Animate.css 库;
  2. class 类里面必须要包含 animated 类名,同时根据需求的不同,入场/出场动画具体要使用的动画效果名字要写在第二个类名上。

祝好,qdywxs ♥ you!