粒子时钟通过Canvas将时间数字转为点阵,每个亮像素生成多个带物理属性的粒子,经插值运动与生命周期控制实现动态效果,并支持配色、交互、高清适配等增强技巧。

网页端用 Canvas 制作粒子时钟动画,核心是把时间数字“拆解成点阵”,再用粒子模拟这些点的动态生成与运动。不依赖复杂框架,纯 JS + Canvas 就能实现流畅、可定制的视觉效果。
一、准备 Canvas 画布与基础渲染循环
先在 HTML 中插入 canvas 元素,并获取上下文:
(HTML) (JS 初始化)const canvas = document.getElementById('clock');
const ctx = canvas.getContext('2d');
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 更新粒子 + 绘制
requestAnimationFrame(animate);
}
animate();
二、将时间转为“点阵字符”(关键一步)
粒子只出现在数字该亮的位置。推荐用预定义的 5×7 或 7×9 点阵字体——每个数字对应一个二维布尔数组,true 表示此处需要粒子。
例如数字 "1" 的简化 5×7 点阵可表示为:
[
[0,0,1,0,0],
[0,1,1,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,1,1,1,0]
]
实际中建议封装一个 getDigitBitmap(digit) 函数,返回对应点阵;再遍历当前时间字符串(如 "12:34:56"),跳过冒号或按需处理。
三、生成并管理粒子系统
每个“亮起的像素点”位置,生成若干粒子(比如 3–8 个),赋予随机初速度、大小、透明度和生命周期。
- 粒子属性建议包含:
x,y,vx,vy,size,alpha,life,maxLife - 目标位置设为点阵坐标(经缩放后映射到 canvas 实际像素),粒子通过插值或物理衰减逐步靠近
- 每帧更新:位置 += 速度,透明度/尺寸随 life 衰减,life--;life ≤ 0 时重置或回收
- 为避免卡顿,限制总粒子数(如 2000 以内),用对象池复用粒子实例
四、增强炫酷感的实用技巧
真正让效果出彩的是细节动效与视觉反馈:
- 入场动效:新时间出现时,旧粒子快速飞散(加个“爆炸”力),新粒子从中心迸发或沿路径滑入
-
颜色渐变:按小时/分钟/秒分段配色,或用 HSL 动态计算 hue(如
hsl(${t * 2 % 360}, 80%, 60%)) - 鼠标交互:悬停时粒子受斥力偏移,点击触发全屏粒子脉冲
-
模糊与光晕:开启
ctx.shadowBlur+shadowColor,让粒子自带辉光(注意性能) - 节奏同步:让粒子呼吸频率、扩散速度随秒针跳动微调,强化时间感知
不复杂但容易忽略:确保 canvas 的 devicePixelRatio 适配高清屏,用 canvas.width = canvas.offsetWidth * window.devicePixelRatio 等方式提升清晰度。粒子时钟的魅力在于“数字可读”与“视觉不可控”的平衡——既要一眼看出时间,又想多看几秒动画本身。


















