如何制作简单动画使图形动态展示?

摘要:在可视化展现中,动画是强化数据表达,吸引用户的重要技术手段,本文将介绍动画的三种实现形式,以及如何具体地在HTMLCSS和Shader中去实现动画。
大家好,本文分享的是如何生成简单动画让图形动起来。 在可视化展现中,动画它是强化数据表达,吸引用户的重要技术手段。 在具体实现动画之前,我们先来了解一下动画的三种形式,分别是固定帧动画、增量动画和时序动画。 graph LR A[动画的三种形式] --> B[固定帧动画] A --> D[增量动画] A --> E[时序动画] B --> F[使用已生成的静态图像,将图像依次播放] D --> C[动态绘制图像] E --> C 固定帧动画的实现,是使用已生成的静态图像,然后将这些图像依次播放,而后面两种,增量动画和时序动画,都是需要动态绘制图像。可想而知,后面这两种动画形式会更灵活一些。 接下来,我们就来了解如何在HTML/CSS和Shader中实现动画效果。 HTML/CSS 首先,我们来了解如何在HTML/CSS中实现动画。 固定帧动画 先来看固定帧动画的一个例子,这个代码实现的是一个飞动的小鸟。 e.g.动态的小鸟 <!-- 固定帧动画 --> <div v-show="checkedTab === 0" style="position: relative;"> <div class="fixed-frame"></div> </div> /*固定帧动画*/ .fixed-frame { position: absolute; left: 100px; top: 100px; width: 86px; height: 60px; zoom: 0.5; background-repeat: no-repeat; background-image: url("@/assets/bird.png"); background-position: -178px -2px; animation: flappy .5s step-end infinite; } @keyframes flappy { 0% {background-position: -178px -2px;} 33% {background-position: -90px -2px;} 66% {background-position: -2px -2px;} } 很显然,在实现这个固定帧动画之前,我们需要预先准备好静态图片,这个例子中我们使用的是雪碧图,也叫CSS精灵,是将小图合并在一起形成的图片,在这里我们设置background-image来指定背景图,然后通过animation动态修改background-position来逐帧切换,最终形成一个动态的效果。当然如果我们使用的是多张图片,直接切换background-image也是可以的。 其中step-end 会使 keyframes 动画到了定义的关键帧处直接突变,没有变化的过程。 通过这个例子我们能发现,固定帧动画实现起来非常简单,比较适合的场景是提供现成图片的动画帧图像,如果要去动态绘制图像,就不太合适。如果要生成动态绘制的图像,也就是非固定帧动画,通常会使用另外两种方式。 增量动画 先来看增量动画,其实从名称上看,我们就能有一个大致的概念,增量嘛,就是增加数量,所以增量动画就是在动画的每一帧给属性一个增量。 下面是一个简单的旋转方块的动画例子,是一个旋转的蓝色方块。 <!-- 增量动画 --> <div style="position: relative;"> <div class="increase-frame" ref="increaseRef"></div> </div> /*增量动画*/ .increase-frame { position: absolute; left: 100px; top: 100px; width: 100px; height: 100px; background-color: blue; transform-origin: 50% 50%; } let rotation = 0; requestAnimationFrame(function update() { increaseRef.value.style.transform = `rotate(${rotation ++}deg)`; requestAnimationFrame(update); }); 以上动画实现的关键逻辑就在于修改rotation的值,在每次绘制的时候将它加1。
阅读全文