Canvas 阴影属性简介
Canvas 2D 上下文提供了4个阴影相关的属性,用于为绘制的图形添加阴影效果:
1. shadowColor
设置阴影的颜色。
ctx.shadowColor = 'rgba(0, 0, 0, 0.5)'; // 半透明黑色
ctx.shadowColor = '#ff0000'; // 红色
ctx.shadowColor = 'blue'; // 蓝色
- 默认值:
transparent(透明,即无阴影) - 支持任何合法的 CSS 颜色值
2. shadowBlur
设置阴影的模糊程度(像素值)。
ctx.shadowBlur = 10; // 轻度模糊
ctx.shadowBlur = 30; // 重度模糊
- 默认值:
0(无模糊,边缘清晰) - 值越大,阴影边缘越柔和扩散
3. shadowOffsetX
设置阴影的水平偏移量(像素值)。
ctx.shadowOffsetX = 5; // 向右偏移5像素
ctx.shadowOffsetX = -5; // 向左偏移5像素
- 默认值:
0
4. shadowOffsetY
设置阴影的垂直偏移量(像素值)。
ctx.shadowOffsetY = 5; // 向下偏移5像素
ctx.shadowOffsetY = -5; // 向上偏移5像素
- 默认值:
0
完整示例
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
// 设置阴影
ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
ctx.shadowBlur = 15;
ctx.shadowOffsetX = 8;
ctx.shadowOffsetY = 8;
// 绘制一个带阴影的矩形
ctx.fillStyle = '#3498db';
ctx.fillRect(50, 50, 150, 100);
// 绘制一个带阴影的圆形
ctx.beginPath();
ctx.arc(350, 120, 60, 0, Math.PI * 2);
ctx.fillStyle = '#e74c3c';
ctx.fill();
注意事项
- 性能影响:阴影会增加渲染计算量,大量图形同时使用阴影可能导致性能下降
- 关闭阴影:不需要阴影时,将
shadowColor设为transparent或将shadowBlur设为0 - 影响所有后续绘图:阴影设置一旦生效,会影响之后的所有绘制操作,直到被修改或重置
- 不支持单独关闭:没有单独的
disableShadow()方法,需手动重置属性
常用技巧
实现发光效果(阴影颜色与填充颜色相同,无偏移):
ctx.shadowColor = '#ffff00';
ctx.shadowBlur = 20;
ctx.shadowOffsetX = 0;
ctx.shadowOffsetY = 0;
ctx.fillStyle = '#ffff00';
ctx.fillRect(100, 100, 80, 40);
实现内阴影效果(反向偏移,配合裁剪区域):
需要结合 clip() 方法实现,相对复杂一些。
