canvas阴影需协同设置shadowcolor与shadowblur:shadowcolor须含有效透明度(如"rgba(0,0,0,0.2)"),shadowblur控制模糊程度(0为硬边,建议≥2),发光效果依赖多层阴影叠加,动画中blur宜缓动于10–50间以保性能。

Canvas阴影不是“打开开关”就能出效果,关键得把 shadowColor 和 shadowBlur 配合好——颜色设了但模糊为0,是硬边影子;模糊设了但颜色透明,等于没画。
shadowColor 必须带有效透明度
默认值是 #000000,看似有颜色,但很多场景下开发者误用 "#000" 或未设 alpha,结果阴影不可见。真正起作用的是带透明度的值,例如:
-
ctx.shadowColor = "rgba(0, 0, 0, 0.2)"—— 柔和黑灰影,适合卡片投影 -
ctx.shadowColor = "hsla(210, 80%, 60%, 0.7)"—— 偏蓝光晕,适合科技感发光 -
ctx.shadowColor = "transparent"或"rgba(0,0,0,0)"—— 彻底无影,常被误当作“失效”
shadowBlur 控制的是模糊半径,不是像素扩散量
它决定阴影边缘的柔化程度,数值越大,光晕越弥散、越“虚”。但要注意:
- 设为
0或负数 → 无模糊,只有硬边偏移影(视觉上接近没影) - 在高 DPR 屏幕(如 iPhone)上,
shadowBlur = 1常不可见,建议起步值至少为2 - 大 blur + 小图形(如 12px 文字)易导致文字“发虚”甚至消失,调试时可先关 blur 看位置是否准确
发光效果靠多层阴影叠加
单层阴影难兼顾强度与扩散,真实发光需多次绘制、逐层加 blur:
- 第一层:小 blur(如
5)+ 高透明度颜色 → 贴近主体的实色光边 - 第二层:中等 blur(如
15)+ 中等透明度 → 主体光晕 - 第三层:大 blur(如
40)+ 低透明度 → 外扩氛围光 - 每层都需重设
shadowColor和shadowBlur,且都在绘制前设置
动画中 shadowBlur 别乱调
频繁修改 shadowBlur 值会明显掉帧,尤其在低端设备上:
- 常规投影推荐
4–12区间,兼顾清晰与性能 - 呼吸式发光动画中,blur 可在
10–50间缓动,但避免跳变 - 搭配
shadowOffsetX/Y = 0使用,能形成居中光晕,比偏移更自然











