繁体   English   中英

清除画布JavaScript

[英]Clear canvas JavaScript

我正在尝试清除画布。 我尝试关闭路径,但没有任何改变。 另外,我不太确定ctxBg.close(); 在正确的地方。
谢谢。

function drawGrid () {
    drawGrid();
    ctxBg.clearRect(0, 0, canvas.width, canvas.height);

    function drawGrid () {
        for (var i = 75; i <= canvasWidth-25; i+= 25) {
            ctxBg.beginPath();
            ctxBg.moveTo(-25 + i,55);
            ctxBg.lineTo(-25 + i, canvasHeight - 55);
            ctxBg.stroke();
}

    for (var i = 25; i <= canvasHeight -75; i+= 25) {
        ctxBg.beginPath();
        ctxBg.moveTo(55,25 + i);
        ctxBg.lineTo(canvasWidth-55, 25 + i);
        ctxBg.stroke();      
    }ctxBg.close();
}

您有drawGrid()函数的两个定义:

function drawGrid () {
 ...
 function drawGrid () {

您只能有一个。 接下来,在上下文上没有close()方法,只有closePath() 但是,这在这里没有用。 closePath不会“结束”路径,而是连接路径中的第一个点和最后一个点,因此路径形状是封闭的。

当然这对于行没有用,在任何情况下都必须在stroke()之前调用它。

第三,您正在(尝试)渲染网格,然后立即将其清除。 这不会在画布上显示任何内容。 您需要将这些操作分开。

这是一个建议的解决方案。 有两个功能,一个用于绘制网格,一个用于清除网格:

 var canvas = document.querySelector("canvas"), canvasWidth = canvas.width, canvasHeight = canvas.height, ctxBg = canvas.getContext("2d"); ctxBg.translate(0.5, 0.5); // just to make the lines sharper function drawGrid() { ctxBg.beginPath(); // this can be placed here for (var i = 75; i <= canvasWidth - 25; i += 25) { ctxBg.moveTo(-25 + i, 55); ctxBg.lineTo(-25 + i, canvasHeight - 55); } for (var i = 25; i <= canvasHeight - 75; i += 25) { ctxBg.moveTo(55, 25 + i); ctxBg.lineTo(canvasWidth - 55, 25 + i); } ctxBg.stroke(); // stroke all at once // remove button code (ref. comments) var button = document.querySelector("button"); button.parentNode.removeChild(button); } function clearGrid() { ctxBg.clearRect(0, 0, canvas.width, canvas.height); } 
 <button onclick="drawGrid()">Grid</button> <button onclick="clearGrid()">Clear</button><br> <canvas></canvas> 

更新:如果需要删除的按钮是上面示例中的HTML按钮,请使用以下样式之一将其删除:

// assumes the button element is stored in variable button:
button.style.display = "none";

或完全使用其parentNoderemoveChild()

button.parentNode.removeChild(button);
ctxBg.clearRect(0,0,canvas.width,canvas.height);

这将清除您的画布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM