canvas 实现橡皮擦

canvas 实现橡皮擦

<div class="canvas-wrapper">
  <canvas id="canvas" width="800" height="800">a canvas</canvas>
</div>
 * {
      box-sizing: border-box;
      margin: 0;
    }

    #canvas {
      box-shadow: 0 0 0 1px tomato;
      padding: 0px;
      transform: scale(0.5);
      transform-origin: top left;
    }

    .canvas-wrapper {
      width: 400px;
      height: 400px;
    }
const canvas_con = canvas.getContext("2d");
let darwingSurfaceImageData = null;
let isErasing = false;

canvas_con.fillStyle = "rgba(200, 10, 50, .1)";
canvas_con.strokeStyle = "rgba(200, 10, 50, .8)";

canvas_con.beginPath();
canvas_con.save();
canvas_con.translate(canvas.width / 2, canvas.height / 2);
const part = 17;
const unitAngle = (Math.PI * 2) / part;
for (let i = 0; i < part; i++) {
    canvas_con.save();
    canvas_con.rotate(unitAngle * i);
    canvas_con.fillRect(0, -canvas.width / 16, canvas.width / 5, canvas.width / 8);
    canvas_con.restore();
}
canvas_con.restore();
canvas_con.closePath();

function saveDrawingSfarce() {
    darwingSurfaceImageData = canvas_con.getImageData(
        0,
        0,
        canvas.width,
        canvas.height
    );
}

saveDrawingSfarce();
function restoreDrawingSface() {
    canvas_con.putImageData(darwingSurfaceImageData, 0, 0);
}
function drawEraser({ x, y }) {
    canvas_con.save();
    canvas_con.beginPath();
    canvas_con.arc(x, y, 10, 0, Math.PI * 2, false);
    canvas_con.clip();
    canvas_con.clearRect(0, 0, canvas.width, canvas.height);
    canvas_con.closePath();
    canvas_con.restore();
}

canvas.onmousedown = function (e) {
    if (e.button !== 0) {
        return;
    }
    isErasing = true;
    drawEraser({
        x: e.x * 2,
        y: e.y * 2
    });
};

canvas.onmouseup = function (e) {
    isErasing = false;
    saveDrawingSfarce();
    restoreDrawingSface();
};

canvas.onmousemove = function (e) {
    if (e.button !== 0) {
        return;
    }
    if (isErasing) {
        drawEraser({
            x: e.x * 2,
            y: e.y * 2
        });
    }
};


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容