画布上的鼠标移动高亮显示正方形
问题描述:
我有一个画布,上面有许多栅格,并且会显示一个文本。我也需要用户与画布交互。画布上的鼠标移动高亮显示正方形
我想突出显示相应的方块,当用户在画布上拖动鼠标或点击它时。
我无法选择使用Javascript突出显示的网格。 发布整个代码 - fiddle-link
我试过这个,但它不工作。
$('.canvasld').mousedown(function(e){
let x = e.clientX - $('.canvasld').offsetLeft,
y = e.clientY - $('.canvasld').offsetTop,
col = Math.floor(x /6),
row = Math.floor(y /6);
context.rect(x, y, 5, 5);
//pixel['enabled'] = true;
context.fillStyle = canvasConfig.options.enabledPixelColor;
context.fill();
});
答
您所连结的的jsfiddle有几个问题:
首先,你的x和y的值都NaN
,因为 $('.canvasld').offsetLeft)
是不确定的。在JQuery中,查询中不存在offsetLeft
属性。
您可以使用JQuery .offset()
方法,该方法返回具有属性left
和right
的对象。
其次,您的context
和canvasConfig
都未定义。
下面是有关问题的代码片段,纠正了这些问题。我用你的默认对象代替了不存在的canvasConfig:
// revised mousedown code
$('.canvasld').mousedown(function(e) {
// small square size
let squareSize = (defaults.pixelSize/2);
// get the x and y of the mouse
let x = e.clientX - $('.canvasld').offset().left;
let y = e.clientY - $('.canvasld').offset().top;
// get the grid coordinates
let col = Math.floor(x/squareSize);
let row = Math.floor(y/squareSize);
// get the canvas context
let context = $('.canvasld')[0].getContext('2d');
// check if the square falls into the smaller grid
if(col > 0 && row > 0 && col % 2 > 0 && row % 2 > 0) {
// draw the rectangle, converting the grid coordinates back
// into pixel coordinates
context.rect(col * squareSize, row * squareSize, squareSize, squareSize);
context.fillStyle = defaults.enabledPixelColor;
context.fill();
}
});
希望我能帮忙! :-)
谢谢你的帮助,但是当我粘贴这个小提琴时,它没有突出显示我点击的网格,我不希望它在黑色部分突出显示,它应该突出显示在灰色部分(即。广场)。我怎样才能得到我想突出的广场? – RemyaJ
您可以检查行和列是否> 0,以及行和列是否都是奇数。如果所有这些条件都通过了,那么你画黄色的方块。 –
如果我能够帮助,请upvote我的答案!因为我是新用户,所以我想赢得声誉。 –