返回

无畏蹩脚,序列帧动画大揭秘

前端

一场说走就走的序列帧动画之旅

身处编程世界的菜鸟,难免会对序列帧动画产生好奇,而我便是其中一员。从最初的懵懂无知到如今的稍有心得,这段经历充满着曲折与欢笑。现在,就让我来与你分享这段奇妙的旅程吧!

从零开始,探索序列帧动画的世界

初识序列帧动画,我便被它的魅力深深吸引。那些动态而连贯的画面,仿佛在向我诉说着一个又一个动人的故事。为了掌握这门艺术,我决定以最蹩脚的方式去尝试。

在网上搜罗各种教程,我学到了两种实现序列帧动画的方法:css 和 js。css 作为一种强大的样式语言,可以轻松实现简单的动画效果。而 js 作为一门脚本语言,则可以实现更复杂的动画效果。

带着对新知识的渴望,我迫不及待地开始了我的创作之旅。

第一套代码:css 序列帧动画初体验

在css中,可以使用 @keyframes 规则来定义动画的关键帧。然后,通过 animation 属性将关键帧应用到元素上。于是,我的第一套代码诞生了:

@keyframes example {
  from {
    left: 0;
  }
  to {
    left: 100px;
  }
}

div {
  width: 50px;
  height: 50px;
  background-color: red;
  animation: example 1s infinite;
}

这段代码将一个红色的方块从左到右移动了100像素,并且无限循环。虽然很简单,但它却让我兴奋不已,因为这是我第一次用代码实现了动画效果。

第二套代码:js 序列帧动画再进一步

在掌握了 css 序列帧动画的基础之后,我决定向 js 迈进。js 的动画功能更加强大,我们可以使用 requestAnimationFrame 函数来实现更流畅的动画效果。于是,我的第二套代码诞生了:

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

var images = [];
for (var i = 1; i <= 10; i++) {
  var image = new Image();
  image.src = 'image' + i + '.png';
  images.push(image);
}

var frameIndex = 0;
function draw() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.drawImage(images[frameIndex], 0, 0);
  frameIndex++;
  if (frameIndex >= images.length) {
    frameIndex = 0;
  }
  requestAnimationFrame(draw);
}

draw();

这段代码加载了一组图片,然后使用 requestAnimationFrame 函数逐帧绘制图片,从而实现了流畅的动画效果。这次,我的动画变得更加生动有趣,也让我对 js 的动画功能有了更深刻的认识。

第三套代码:结合 css 和 js 的动画三剑客

在掌握了 css 和 js 的动画功能之后,我决定将它们结合起来,创造出更加复杂的动画效果。于是,我的第三套代码诞生了:

<div id="container">
  <div id="box"></div>
</div>
#container {
  width: 500px;
  height: 500px;
  position: relative;
}

#box {
  width: 100px;
  height: 100px;
  background-color: red;
  position: absolute;
  animation: move 1s infinite;
}

@keyframes move {
  from {
    left: 0;
    top: 0;
  }
  to {
    left: 400px;
    top: 400px;
  }
}
var box = document.getElementById('box');
box.addEventListener('click', function() {
  box.style.animationPlayState = 'paused';
});

这段代码将一个红色的方块从左上角移动到右下角,并且无限循环。当用户点击方块时,动画将暂停。这次,我不仅实现了流畅的动画效果,还添加了交互功能,让动画变得更加有趣。

无畏蹩脚,享受创作的乐趣

回望这段旅程,我不得不承认,我的代码确实有些蹩脚。但正因为这些蹩脚的尝试,我才能不断学习、不断进步。如今,我已能熟练地使用 css 和 js 来实现各种复杂的动画效果。

所以,如果你也对序列帧动画感兴趣,请不要害怕犯错,不要害怕蹩脚。勇敢地尝试吧,你会发现,在编程的世界里,没有什么是做不到的。

愿你也能在探索动画的道路上,收获属于自己的精彩!