我画了两张图片。一个说“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的方形图像并解决问题。但是,我真的想知道我做错了以备将来参考。 提前感谢所有支持。
答案 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;