代码之家  ›  专栏  ›  技术社区  ›  DaFudgeWizzad

如果形状超出了javascript画布的范围,如何剪切形状?

  •  2
  • DaFudgeWizzad  · 技术社区  · 8 年前

    我想创建一个圆,如果它超出了另一个形状,就把它的一部分切下来。

    例如,如果圆的一半在正方形外,则将外部的所有内容都剪切掉,但不要将内部的内容剪切掉。类似于此片段的内容,只是方块外的部分是隐藏的。我宁愿避免将其掩蔽,因为这将放在另一个画布上,覆盖整个屏幕。

    密码

    var canvas = document.getElementById("canvas"),
        ctx = canvas.getContext("2d");
    ctx.rect(20,20,100,100);
    ctx.stroke();
    ctx.closePath();
    ctx.beginPath();
    ctx.arc(70, 90, 60, 0, Math.PI * 2, false)
    ctx.stroke();
    ctx.restore();
    <html>
      <body>
        <canvas id="canvas"></canvas>
      </body>
    </html>
    2 回复  |  直到 8 年前
        1
  •  3
  •   Lece    8 年前

    你可以 clip() 圆圈,就像这样;

    var canvas = document.getElementById("canvas"),
    ctx = canvas.getContext("2d");
    ctx.rect(20,20,100,100);
    ctx.stroke();
    ctx.closePath();
    ctx.clip();  // clip circle
    ctx.beginPath();
    ctx.arc(70, 90, 60, 0, Math.PI * 2, false)
    ctx.stroke();
    ctx.restore();
    <html>
      <body>
        <canvas id="canvas"></canvas>
      </body>
    </html>
        2
  •  0
  •   Nitin Dhomse    8 年前

    这是我为裁剪sqaure的外部而调整的尺寸

    var canvas = document.getElementById("canvas"),
        ctx = canvas.getContext("2d");
    ctx.rect(20,20,100,100);
    ctx.stroke();
    ctx.closePath();
    ctx.beginPath();
    ctx.arc(70, 90, 60, 10, -4*Math.PI * .05 , false)
    ctx.stroke();
    ctx.restore();
    <html>
      <body>
        <canvas id="canvas"></canvas>
      </body>
    </html>