动态雷达波纹界面核心是多环按序生成、扩散、淡出:用径向渐变实现亮边→柔散→消失效果,waves数组管理生命周期,requestanimationframe驱动每帧更新radius与life并剔除超限波纹。

用 HTML5 Canvas 制作动态雷达波纹扩散监控界面,关键不是“画一个圈”,而是让多个环按时间顺序生成、扩散、淡出,形成持续涌出的扫描感。核心靠三块:径向渐变控制透明衰减、波纹生命周期管理、requestAnimationFrame 驱动帧循环。
设置画布与波纹数据结构
先固定画布尺寸(如 600×600),取中心点 cx = 300, cy = 300。准备一个数组 waves = [] 存储活跃波纹,每个对象包含:
-
x, y:波纹起始中心(通常就是画布中心,也可响应点击) -
radius:当前半径,每帧递增 -
maxRadius:扩散上限(如 200),超限即销毁 -
life和maxLife:用于控制透明度衰减节奏(例如从 1.0 降到 0)
用 createRadialGradient 构建带衰减的波纹
每个波纹不画实线,而用径向渐变模拟“亮边→柔散→消失”的效果:
- 调用
const gradient = ctx.createRadialGradient(x, y, radius - 1.5, x, y, radius + 1.5) - 添加三个色标:
•gradient.addColorStop(0, 'rgba(0, 200, 255, 0.7)')
•gradient.addColorStop(0.6, 'rgba(0, 200, 255, 0.2)')
•gradient.addColorStop(1, 'rgba(0, 200, 255, 0)') - 设
ctx.fillStyle = gradient,再用ctx.beginPath(); ctx.arc(x, y, radius, 0, Math.PI * 2); ctx.fill()
逐帧更新与渲染逻辑
用 requestAnimationFrame 循环执行以下三步:
-
更新:遍历
waves,对每个波纹执行radius += 1.3、life--;若radius > maxRadius || life ,则剔除 -
绘制:先
ctx.clearRect(0, 0, width, height)清空;再逆序遍历(新波纹在上层),逐个填充 -
触发新波纹:可定时(如每 800ms)
waves.push({x: cx, y: cy, radius: 0, maxRadius: 200, life: 60, maxLife: 60}),或监听点击事件生成
增强监控感的小优化
真实监控界面需要一点“电磁扰动”气质,可加这些细节:
- 半径增速微浮动:
radius += 1.1 + Math.random() * 0.4 - 渐变中心轻微抖动:
const ox = x + (Math.random() - 0.5) * 2,绘图时用ox, oy替代x, y - 叠加两层波纹:主环慢速(+1.0/帧)、辅环快速(+1.8/帧),辅环颜色更浅、透明度更低
- 背景加静态极坐标网格(同心圆+射线),用
ctx.setLineDash([2, 4])做虚线,提升专业感
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











