像素流Peer Stream

如图所示,和上一期《Shader编程之地标特效》

  • 动画在一个圆形区域内的二维动画。

  • 若干个同心四边形(矩形框、方框)以正弦函数的规律来回旋转。

  • 边长更大的四边形质量更大,“惯性”也看上去更大,整体看来,像是中心的旋转力量带动了周围四边形的旋转。

  • 四边形的颜色是任意的不透明的饱和色,亮度适中。

首先需要一个<canvas>画板,并指定任意的宽高:

<canvas id="canvas" width="500" height="500"></canvas>

接下来通过getContext函数定义它为二维画板,接着将canvas的宽和高中最小的一边作为圆形区域的直径,通过CanvasRenderingContext2D的clip方法限定圆形绘画区域,完整的代码如下:

const $ = canvas.getContext("2d");
const l = Math.min(canvas.width, canvas.height) / 2;$.strokeStyle = `hsl(${360 * Math.random()}deg 100% 50%)`;
$.lineWidth = 6;$.beginPath();
$.arc(l, l, l, 0, Math.PI * 2);
$.clip();(function frame(time) {$.clearRect(-l, -l, l * 2, l * 2);for (let x = 1; x <= l; x += $.lineWidth + 2) {$.strokeRect(-x, -x, x * 2, x * 2);const theta = Math.sin(x / l - time / 512) * 60;$.setTransform(new DOMMatrix().translate(l, l).rotate(0, 0, theta));}window.animationFrame = requestAnimationFrame(frame);
})(0);

然后我们使用CSS的hsl函数生成随机的饱和亮色,使得特效更鲜艳。在256 x 256 x 256 = 16777216种真彩色中,只有256 x 256 x 3 = 196608种饱和色,约占总数的1%,剩下的颜色都是不鲜艳的,而这1%的饱和色中又只有256 x 6 = 1536种亮色,剩下的都不够亮。所以既饱和又明亮的颜色只占总数的(256 x 6) / (256 x 256 x 256) ≈ 0.009%,在色谱上,只有一条边属于这个范围:

接下来我们要定义每一帧的函数frame(time),然后通过requestAnimationFrame来循环调用frame,并且传入当前的时刻time,我们利用这个时刻来计算当时每个四边形的旋转角度。每一帧中,先使用clearRect函数清除掉上一帧的画面,然后遍历每个四边形,矩形边框(四边形)之间保持一定的间隙,最后在正弦函数中决定这个方框的角度,角度和当前时刻和方框的边长都有关系,所以Math.sin中传入了2个变量:空间变量x(边长)和时间变量time(时刻)。最终调用strokeRect函数画出方框,就实现了魔鬼四边形特效:

Canvas特效之魔鬼四边形相关推荐

  1. Canvas特效动画

    给大家分享一个用Canvas绘图写成的动画特效,动画的效果如下: 以下是代码实现: <!DOCTYPE html> <html><head><title> ...

  2. 『 canvas 特效』一文教你绘制绚丽的星空背景 TS + ES6

    介绍 很久没有写关于 canvas 效果的文章了,刚好最近又学到了一个新的特效,使用 canvas 绘制多层次动态星空背景,今天就分享给大家.首先我们依旧来看一下最终实现的效果,如图所示: 由于录制 ...

  3. canvas特效代码详解(2)

    canvas是一个就基于像素的画图h5元素. 利用canvas做一个如下描述所示的动态图形:当鼠标点下去时开始绘图,在鼠标结束时完成一个矩形,当再一次点击时重复第一次的绘图步骤. 1 <!DOC ...

  4. H5炫酷特效系列2——canvas特效-炫酷的心

    之前已经有了一个满屏幕红心的案例,这次带来一个更加炫酷的心型炫酷动效,直接上图,有兴趣的就继续往下看,没兴趣直接过. 屏幕上眼花缭乱的心,不停的冲击着你的视线,让那些少女心砰砰直跳,绝对表白利器,同志 ...

  5. html5 canvas爆炸,html5 canvas彩色爆炸的小球动画特效

    特效描述:html5 canvas 彩色爆炸 小球动画特效.html5 canvas特效,有中心向四周爆炸的彩色小球,有开始和暂停按钮 代码结构 1. HTML代码 开始运动 停止运动 var can ...

  6. 炫酷的canvas粒子文字js特效

    下载地址 一款HTML5 canvas特效,炫酷的canvas粒子文字特效,该素材呈现了由多彩的粒子形成文字的动画效果,可用作网页进入动画等,精简易用. dd:

  7. 马赛克颗粒感天空Canvasjs特效

    下载地址 马赛克颗粒感天空Canvas特效是一款适用于网页制作或者网页背景特效. dd:

  8. 分享111个JS图片切换特效,总有一款适合您

    分享111个图片切换,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 111个图片切换下载链接:https://pan.baidu.com/s/1iGzOzU ...

  9. vue3 canvas 星空背景图

    vue3 canvas 星空背景图 页面截图 代码 页面截图 代码 <template><div ref="container" class="cont ...

最新文章

  1. windows adb shell 乱码
  2. 开发者必备Docker命令
  3. PAT1011 A+B 和 C (15 分)
  4. 玫曦音乐播放器开源源码
  5. [CQOI2011]放棋子 题解(dp+组合数学)
  6. 没有UITableViewController的UIRefreshControl
  7. NER中的词汇增强方法(LatticeLSTM、CGN、FLAT、Simple-Lexicon)
  8. 浅谈系统如何对接社交登录之微博登录功能
  9. 计算机网络故障排查,计算机网络故障诊断和排除方法
  10. mysql 经纬度范围_根据经纬度查询最近距离,mysql查询经纬度附近范围
  11. 刚刚!国产大数据基础软件第一股星环科技成功上市,开盘大涨超52%
  12. 什么是“好”系统呢?
  13. tagged和untagged
  14. C++ 实验二 NO.4 字符串合并:输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
  15. SAP MM 物料扩充MRP范围
  16. matlab直流电机初始转速,直流电机转速控制的matlab实验.doc
  17. 婚宴座位图html5,婚宴酒席座位安排图 20桌婚宴座位安排图
  18. LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波
  19. 中国土地利用现状遥感监测数据
  20. 纯HTML也能访问数据库

热门文章

  1. AD7799称重系统
  2. SpringCloud——Gateway(介绍、快速入门、网关集群)
  3. EQG-RACE: Examination-Type Question Generation翻译
  4. R软件与RStudio安装(版本R-4.2.2)Windows10
  5. 常青藤开源科技加入,龙蜥社区再迎 HPC 和开源领域新伙伴
  6. 矩阵(Matrix)
  7. parity使用教程
  8. Win10系统简体繁体切换
  9. python.exe-找不到序数:无法定位序数242与动态链接库libiomp5md.dll上。
  10. Python与人工智能到底有什么关系呢?Python学习