Web 动画周报,一周一刊,每周一发布。让咱们来一块儿聊聊 Web 动画,和它们背后的故事。canvas
本期亮点:Lorenzo 把本身的电脑窗口变成了一个水缸,水缸中的水能根据窗口的移动而震荡,视觉效果满分。函数
周报将 Web 动画大体分为三类:CSS 动画、SVG 动画 和 WebGL/Canvas 动画。全部的动画将按类别展现,方便读者有针对性的学习。 布局
CSS 动画
这是一个纯 CSS 动画,没有使用一张图片。动画的亮点除了画风治愈之外,还向你们展现了如何使用 CSS 绘制常见的几何图案,好比椭圆形、三角形、爱心形状等等。下面这个动画就向你们演示了如何用 CSS 画三角形。
这种波浪的感受是怎么作的?看下面这个动图你就明白了:
另外,背景颜色的渐变是经过 CSS 滤镜完成的,滤镜名字叫作
filter: hue-rotate()
能够用来改变图片或者背景的颜色,这个属性是能够 animate 的。
这个动画使用了 grid 布局,每一个数字都是由一个个的小方块拼凑起来的。做者为每种数字写一个单独的类来控制,因为数字一共只有 0-9 十种形状,因此也不会太繁琐。方格的出现和消失都是经过改变
clip-path
来实现的,也就是说,这里的每个小方块都有本身的
clip-path
。
乍一看还觉得是一个用 Three.js 写的 WebGL 动画(由于从材质上看起来就很像😂),但看了代码发现居然是一个纯 CSS 动画。那些看上去很是 3D 小球实际上是用 CSS 渐变画出来的,不过是做者将渐变用的炉火纯青才达到了这样以假乱真的效果。地面的倒影更是加强了这种 3D 的感受。
SVG 动画
“Hover Me” 有两层,第一层是黑底白边的空心字样式,第二层是 SVG, 是红底白字。在动画的一开始,用 mask 将 SVG 那一层遮盖出,这样咱们只能看到黑底白边的那一层。 当鼠标悬浮在字上时,使用 JS 获取到鼠标的位置,而后再动态的修改
mask
的位置,再给
mask
设置一个慢慢变大的动画,第二层就这样被慢慢显示出来了。
WebGL / Canvas 动画
算是一个比较经典的 canvas 动画了,飘带是用
sin()
函数画出来的,其本质就是三角函数的可视化...这个动画代码量不多,JS 部分的代码不到 40 行,很是适合刚学 canvas 的同窗仿写。
动画分为两层(两个canvas),在第一层 canvas 上直接用
fillText()
把想要写的字写出来,这时候这个 canvas 上是白底黑字,可是这层 canvas 并不显示出来。咱们再写一个循环逐个像素点的 “扫描” 这个 canavs, 若是这个像素点是黑色,那么咱们就在另外一个 canvas 的相同位置画一个圆,因此被写了字的地方才会被画上圆。“扫描”的这个过程其实是经过
getImageData()
获取 canvas 某一片区域内的像素点的信息。
代码被压缩过了,看不出来用到了哪些技术。物理引擎确定是用了,不过不知道使用的现成的仍是做者本身写的。动画比较有创意的一点是经过移动窗口来摆动水,这样窗口看起来就像一个水缸同样,视觉上仍是很是震撼的。小编查了下, Web 上好像没有能够直接获取窗口移动速度的 API,可是咱们能够获取到窗口的位置。高中物理告诉咱们,知道了时间和位移咱们就能计算出物体的速度和加速度,小编猜想做者多是这样实现的。
这一期的 Web 动画周报就到这里啦。若是你对周报有什么意见或者建议,欢迎在下方留言。你也能够向周报投稿,投稿的方式是把本身的动画的 Codepen 连接发送到周报下面的评论里便可。Web 动画周报,一周一刊,每周一发布,咱们下周见!post
往期周报
《Web动画周报》第六期:荷塘月色 学习
《Web动画周报》第五期:当心驾驶 动画
《Web动画周报》第四期:密室逃脱 ui
更多往期周报... 3d