插件窝 干货文章 如何使用Canvas创建发散的圆形阴影且圆形区域透明?

如何使用Canvas创建发散的圆形阴影且圆形区域透明?

ctx 阴影 Canvas 设置 797    来源:    2025-03-24

要在Canvas中创建发散的圆形阴影且圆形区域透明,你可以按照以下步骤进行:

  1. 创建Canvas元素:首先,在HTML中创建一个Canvas元素。

    <canvas id="myCanvas" width="500" height="500"></canvas>
    
  2. 获取Canvas上下文:在JavaScript中获取Canvas的2D上下文。

    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    
  3. 绘制圆形:使用arc方法绘制一个圆形。

    ctx.beginPath();
    ctx.arc(250, 250, 100, 0, Math.PI * 2, true); // 圆心在(250, 250),半径为100
    ctx.closePath();
    
  4. 设置阴影:使用shadowBlurshadowColor等属性来设置阴影效果。

    ctx.shadowBlur = 20; // 阴影的模糊程度
    ctx.shadowColor = 'rgba(0, 0, 0, 0.5)'; // 阴影颜色,半透明黑色
    ctx.shadowOffsetX = 0; // 阴影的X轴偏移
    ctx.shadowOffsetY = 0; // 阴影的Y轴偏移
    
  5. 设置填充颜色并填充:使用fillStyle设置填充颜色为透明,然后填充圆形。

    ctx.fillStyle = 'rgba(255, 255, 255, 0)'; // 完全透明
    ctx.fill();
    
  6. 清除阴影设置:在绘制完阴影后,清除阴影设置,以免影响后续绘制。

    ctx.shadowBlur = 0;
    ctx.shadowColor = 'transparent';
    

完整代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Canvas Diverging Shadow</title>
</head>
<body>
    <canvas id="myCanvas" width="500" height="500"></canvas>
    <script>
        const canvas = document.getElementById('myCanvas');
        const ctx = canvas.getContext('2d');

        // 绘制圆形
        ctx.beginPath();
        ctx.arc(250, 250, 100, 0, Math.PI * 2, true);
        ctx.closePath();

        // 设置阴影
        ctx.shadowBlur = 20;
        ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
        ctx.shadowOffsetX = 0;
        ctx.shadowOffsetY = 0;

        // 设置填充颜色并填充
        ctx.fillStyle = 'rgba(255, 255, 255, 0)';
        ctx.fill();

        // 清除阴影设置
        ctx.shadowBlur = 0;
        ctx.shadowColor = 'transparent';
    </script>
</body>
</html>

解释

  • ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise):用于绘制圆形或圆弧。
  • ctx.shadowBlur:设置阴影的模糊程度。
  • ctx.shadowColor:设置阴影的颜色。
  • ctx.fillStyle:设置填充颜色,这里使用rgba(255, 255, 255, 0)表示完全透明。

通过以上步骤,你可以在Canvas中创建一个带有发散阴影且圆形区域透明的效果。