1. 开场白

上一章我们已经了解了雪碧图需要的基本CSS语法,那么这一章节我们将带领大家体验一下动画的语法,以及不同动画种类之间的区别。

动画通常分为两种形式:一种是过渡动画、另一种是帧动画。

2. 过渡动画

之前我们曾经说过,雪碧图在帧动画这一领域独领风骚,那么接下来我们就来分析一下动画领域里面常见的两种形式:过渡动画与帧动画之间的区别。

首先我们来看看目前各类网站中最常见的一种动画:过渡动画

实例演示
预览 复制
复制成功!
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Animate-过渡动画</title>
  <style>
    /* 清除默认样式 */
    * { padding: 0; margin: 0; }
    
    /* 这段代码是为了居中显示,不是重点,看不懂的话可以无视 */
    body {
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    
    .animate {
      width: 100px;
      height: 100px;
      
      /* 使用预先定义好的动画,过渡动画 */
      animation: change-color 2s linear infinite alternate;
    }
    
    /* 定义动画 */
    @keyframes change-color {
      from { background: yellow }
      to { background: green }
    }
  </style>
</head>
<body>
  <div class="animate"></div>
</body>
</html>
运行案例 点击 "运行案例" 可查看在线运行效果

运行结果:

图片描述

可以看到盒子的颜色是从黄色慢慢过渡到绿色,所以叫过渡动画,因为其有一个过渡的效果。

3. 帧动画

再来看看帧动画是什么样的效果:

实例演示
预览 复制
复制成功!
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Animate-帧动画</title>
  <style>
    /* 清除默认样式 */
    * { padding: 0; margin: 0; }
    
    /* 这段代码是为了居中显示,不是重点,看不懂的话可以无视 */
    body {
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    
    .animate {
      width: 100px;
      height: 100px;

	  /* 使用预先定义好的动画,帧动画 */
      animation: change-color 2s steps(5) infinite alternate;
    }

	/* 定义动画 */
    @keyframes change-color {
      from { background: yellow }
      to { background: green }
    }
  </style>
</head>
<body>
  <div class="animate"></div>
</body>
</html>
运行案例 点击 "运行案例" 可查看在线运行效果

运行结果:

图片描述

可以看到是一帧帧播放的,帧数低的时候有种卡卡的感觉,好像一下一下的分步骤从黄色变成绿色的。那我们把帧数提高一下不就看不到一卡一卡的感觉了吗?来试试看:

实例演示
预览 复制
复制成功!
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Animate</title>
  <style>
    /* 清除默认样式 */
    * { padding: 0; margin: 0; }
    
    /* 这段代码是为了居中显示,不是重点,看不懂的话可以无视 */
    body {
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    
    .animate {
      width: 100px;
      height: 100px;
      
      /* 使用预先定义好的动画 */
      animation: change-color 2s steps(100) infinite alternate;
    }
    
    /* 定义动画 */
    @keyframes change-color {
      from { background: yellow }
      to { background: green }
    }
  </style>
</head>
<body>
  <div class="animate"></div>
</body>
</html>
运行案例 点击 "运行案例" 可查看在线运行效果

运行结果:

图片描述

虽然效果一样了,但是怎么感觉更麻烦了呢?还要自己去指定帧数,而过渡动画都是全自动的,帧动画是不是不如过渡动画呢?实际上并不是这样的,帧动画有着自己的适用场景。接下来我们就来探讨一下何时适合帧动画,何时又适合过渡动画。

4. 小结

乍一看好像过渡动画更胜一筹,但实际上他们两个各自有各自的适用场景。

下一章我们就来看看什么样的场景适合过渡动画。