最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - how to fill a cell on clicking the grid on canvas in html5 - Stack Overflow

programmeradmin0浏览0评论

I want to fill a grid cell on clicking on the particular cell.Here is my code:

 function drawBox()
    {   
        for (var row = 0; row < 14; row ++)
        {
            for (var column = 0; column < 13; column ++)
            {
                var x = column * 40;
                var y = row * 40;
                context.beginPath();
                context.rect(x, y, 40, 40);
                context.fillStyle = "white";
                context.fill();
                context.lineWidth = 3;
                context.strokeStyle = 'black';
                context.stroke();
            }
        }

    }

I want to fill a grid cell on clicking on the particular cell.Here is my code:

 function drawBox()
    {   
        for (var row = 0; row < 14; row ++)
        {
            for (var column = 0; column < 13; column ++)
            {
                var x = column * 40;
                var y = row * 40;
                context.beginPath();
                context.rect(x, y, 40, 40);
                context.fillStyle = "white";
                context.fill();
                context.lineWidth = 3;
                context.strokeStyle = 'black';
                context.stroke();
            }
        }

    }
Share Improve this question edited Dec 21, 2012 at 12:44 Cerbrus 73k19 gold badges136 silver badges150 bronze badges asked Dec 21, 2012 at 12:22 Vijeta KaraniVijeta Karani 951 silver badge7 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 9

I've got a working sample here. Code:

var canvas = document.getElementById("canvas"),
    c = canvas.getContext("2d"),
    boxSize = 40,
    boxes = Math.floor(600 / boxSize);
canvas.addEventListener('click', handleClick);
canvas.addEventListener('mousemove', handleClick);

function drawBox() {
  c.beginPath();
  c.fillStyle = "white";
  c.lineWidth = 3;
  c.strokeStyle = 'black';
  for (var row = 0; row < boxes; row++) {
    for (var column = 0; column < boxes; column++) {
      var x = column * boxSize;
      var y = row * boxSize;
      c.rect(x, y, boxSize, boxSize);
      c.fill();
      c.stroke();
    }
  }
  c.closePath();
}

function handleClick(e) {
  c.fillStyle = "black";

  c.fillRect(Math.floor(e.offsetX / boxSize) * boxSize,
    Math.floor(e.offsetY / boxSize) * boxSize,
    boxSize, boxSize);
}

drawBox();
<canvas id="canvas" width="600px" height="600px"></canvas>

I edited the drawBox() function a bit to increase efficiency, also.

e.offsetX is the mouse coordinate, devide by 40, then Math.floor() this to get the cell number, then multiply by 40 to get the starting coordinate of the cell.

发布评论

评论列表(0)

  1. 暂无评论