clearRect不会删除最后一行

时间:2012-10-30 21:46:11

标签: javascript drawing html5-canvas clear

我画了两张图片。一个说“1x10”另一个“10x10”。基本上,当用户点击图像时,我只画一个由9条垂直线划分的正方形或相同的正方形除以9条水平线和9条垂直线。代码如下:

canvas.addEventListener('click',ProcessClick,false);
function ProcessClick(toi){
    var posx = toi.layerX;
    var posy = toi.layerY;
    if(toi.layerX == undefined || toi.layerY == undefined){
        posx = toi.offsetX;
        posy = toi.offsetY;
    }
    if(posx>170 && posx<320 && posy>320 && posy<370){
        rect1x10();
    }
    if(posx>470 && posx<620 && posy>320 && posy<370){
        rect10x10();
    }
}//ProcessClick

rect1x10 = function(){
    ctx.strokeStyle = "blue";
    ctx.fillStyle = "white";
    ctx.clearRect(200, 375, 355, 325);
    ctx.rect(240, 390, 300, 300);
    ctx.fill();
    ctx.lineWidth = 2;
    ctx.stroke();
    ctx.lineWidth = 1;
    var lineX = 270.5;
    for (i = 0; i <= 8; i++){
        ctx.beginPath();
        ctx.moveTo(lineX, 390);
        ctx.lineTo(lineX, 690);
        ctx.stroke();
        lineX += 30;
    }
}//rect1x10

rect10x10 = function(){
    ctx.strokeStyle = "blue";
    ctx.fillStyle = "white";
    ctx.clearRect(200, 375, 355, 325);
    ctx.rect(240, 390, 300, 300);
    ctx.fill();
    ctx.lineWidth = 2;
    ctx.stroke();
    ctx.lineWidth = 1;
    var lineX = 270.5;
    for (i = 0; i <= 8; i++){
        ctx.beginPath();
        ctx.moveTo(lineX, 390);
        ctx.lineTo(lineX, 690);
        ctx.stroke();
        lineX += 30;
    }
    var lineY = 420.5;
    for (i = 0; i <= 8; i++){
        ctx.beginPath();
        ctx.moveTo(240, lineY);
        ctx.lineTo(540, lineY);
        ctx.stroke();
        lineY += 30;
    }
}//rect10x10

第一次点击图像时,一切正常(细线,间距很大),问题是当绘制任一矩形时,下一个矩形就会起作用。例如: 1)当首先调用1x10然后10x10时,最后一条垂直线变粗。 2)当首先调用10x10然后1x10时,最后一条水平线根本不会被擦除。如果我再次拨打1x10,最后的水平线现在会被删除,但最后一条垂直线会变粗。

所有这些只是一个图形参考,所以我可以轻松地显示一个分为1x10或10x10的方形图像并解决问题。但是,我真的想知道我做错了以备将来参考。 提前感谢所有支持。

1 个答案:

答案 0 :(得分:0)

当您stroke矩形时,您的某条路径会残留。

在致电ctx.beginPath();之前致电rect

或者,或者,跳过所有这些并使用strokeRect

ctx.beginPath();
ctx.rect(240, 390, 300, 300);
ctx.lineWidth = 2;
ctx.stroke();
ctx.lineWidth = 1;

ctx.clearRect(200, 375, 355, 325);
ctx.lineWidth = 2;    
ctx.strokeRect(240, 390, 300, 300);   
ctx.lineWidth = 1;