适合用帧动画的场景

1. 适合用帧动画的场景

有时候想要的动画并不是缩小、放大或者变个颜色之类的这么简单,比如我们需要一个复杂的形变加上复杂的运动轨迹,此时过渡动画就有些相形见绌了。虽然 Canvas 或 SVG 能够实现复杂逻辑的动画效果,但是毕竟不是人人都会这种技术。而且有时候开发时间有限,没有时间用代码来绘制一个炫酷动画,所以这个时候帧动画,配上Css Sprite就是最完美的选择。

我们用一张条形Css Sprite来试一下:

编程之家

2. 过渡动画

首先使用过渡动画看看会是什么效果:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Animate</title>
  <style>
    /* 清除默认样式 */
    * { padding: ; margin: ; }
    
    /* 这段代码是为了居中显示,不是重点,看不懂的话可以无视 */
    body {
        height: vh;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .animate {
      width: px;
      height: px;

      /* 指定背景图 */
      background: url(http:https://www.jb51.cc/res/2021/11-02/11/5035ad12112b58705095585b3e794444.jpg);
      
      /* 使用预先定义好的动画 */
      animation: change-position s linear both;
    }

    /* 定义动画 */
    @keyframes change-position {
      from { background-position:  }
      to { background-position: -px }
    }
  </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: ; margin: ; }
    
    /* 这段代码是为了居中显示,不是重点,看不懂的话可以无视 */
    body {
        height: vh;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .animate {
      width: px;
      height: px;

      /* 指定背景图 */
      background: url(http:https://www.jb51.cc/res/2021/11-02/11/5035ad12112b58705095585b3e794444.jpg);
      
      /* 使用预先定义好的动画 */
      animation: change-position s steps() infinite;
    }

    /* 定义动画 */
    @keyframes change-position {
      from { background-position:  }
      to { background-position: -px }
    }
  </style>
</head>
<body>
  <div class="animate"></div>
</body>
</html>

运行结果:

编程之家

这次看起来是不是就是我们想要的结果了呢。帧动画有些类似于我们小时候翻书,翻书翻得快了里面的图案似乎就动起来了:

编程之家

所以设置一个合理的翻书时间是很有必要的,翻书时间太长就代表翻的慢了,图像就不会那么的连贯。

4. 小结

如果点燃一根香烟,然后拿着它快速的在眼前转个圈,你会惊奇的发现好像出现了一个圆形的火圈,这就是视觉暂留现象。

用一个专业点的说法就是:

人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称"后像",视觉的这一现象则被称为"视觉暂留"。

平时去电影院看的电影就是利用了这一原理,胶片快速的切换,在人眼里就好像图案在动。

甚至电子屏幕也是这个原理,玩吃鸡游戏的时候刷新率越高的屏幕显示就越顺畅,理解了这些你就理解了帧动画的原理。

编程之家