Skip to content

04 光晕与拖尾

圆环已经会跟着指针走。这一章只改观感:每个点有稳定光晕,并留下很短的淡出拖尾。不要改 boot(),也不要加新的 script 标签。

对照扩展里 followglow 的 Diff。扩展里本章的文档按钮仍打开快照中的 docs.pdf;本页是同一教程的网页版。

1. src/scene/canvas.jsclear()

resize() 保持不动。替换 clear() 的函数体(文件底部那个函数),让每一帧刷一层半透明罩,而不是实心清屏:

js
export function clear() {
  ctx.shadowBlur = 0;
  ctx.fillStyle = "rgba(7, 11, 20, 0.32)";
  ctx.fillRect(0, 0, canvas.width, canvas.height);
}

罩太不透明,尾巴会立刻消失;太透明,残留光会铺满屏幕。

2. src/particle/particle.js — 色相和 draw()

constructor 里,this.orbitSpeed = ... 之后增加

js
this.hue = 195 + Math.random() * 40;

替换 draw() 的函数体,光晕大小和亮度固定(只有色相因粒子而异):

js
  draw() {
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2);
    ctx.fillStyle = `hsla(${this.hue}, 85%, 70%, 0.85)`;
    ctx.shadowColor = `hsla(${this.hue}, 90%, 68%, 0.9)`;
    ctx.shadowBlur = 10;
    ctx.fill();
  }

不要用速度去缩放 radiusshadowBlur。那样冲向光标时会闪成一团白。

3. src/particle/field.js — 更密的粒子场(可选)

createParticles() 里可以把数量从 90 提到 120

js
for (let i = 0; i < 120; i += 1) {
  particles.push(new Particle());
}

4. css/styles.css — 背景(可选)

html, body 上,可以把实心 background: #070b14 换成:

css
background: radial-gradient(circle at 50% 40%, #1a2450 0%, #070b14 62%);

验收

http:// 打开。移动指针:彩色圆环应有均匀光晕和浅色拖尾,而不是爆成白斑。移出窗口后粒子散开,光晕强度不变。

回到 教程概览