基本上,用户上传一张图片,然后可以在上面绘画,并保存结果。然后另一个用户可以查看照片,如果他们单击与绘制相同的区域,则会发生某些事情。因此,用户 1 可以通过在照片上绘图来为用户 2 设置可点击区域。
现在上传位很好,并且在我已经搞定的教程和示例的帮助下进行绘画。但是定义可点击的区域有点困难。对于像矩形这样的东西很容易,我做了一个例子。
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var button = new Object();
button.x = 50;
button.y = 50;
button.width = 50;
button.height = 50;
button.rgb = "rgb(0, 0, 255)";
function drawbutton(buttonobject)
{
context.fillStyle = buttonobject.rgb;
context.fillRect (buttonobject.x, buttonobject.y, buttonobject.width, buttonobject.height);
context.strokeRect(buttonobject.x, buttonobject.y, buttonobject.width, buttonobject.height);
}
drawbutton(button);
function checkIfInsideButtonCoordinates(buttonObj, mouseX, mouseY)
{
if(((mouseX > buttonObj.x) && (mouseX < (buttonObj.x + buttonObj.width))) && ((mouseY > buttonObj.y) && (mouseY < (buttonObj.y + buttonObj.height))))
return true;
else
return false;
}
$("#myCanvas").click(function(eventObject) {
mouseX = eventObject.pageX - this.offsetLeft;
mouseY = eventObject.pageY - this.offsetTop;
if(checkIfInsideButtonCoordinates(button, mouseX, mouseY))
{
button.rgb = "rgb(0, 255, 0)";
drawbutton(button);
} else {
button.rgb = "rgb(255, 0, 0)";
drawbutton(button);
}
});
但是当涉及到其他形状时,比如圆圈,或者只是一个人在页面上窒息,你会如何检测呢?
一个想法是我使用编辑过的图层,将其隐藏,并从这里检测到蓝色的像素颜色,但这限制了照片的颜色使用,我不完全确定如何实现它。还有其他想法吗?
编辑:
经过一番修修补补,我想出了圆圈,使用毕达哥拉斯定理来查看鼠标坐标是否小于半径,但这假设圆心为 0,0,因此将鼠标偏移为圆圈的实际中心。例子
function checkIfInsideButtonCoordinates(buttonObj, mouseX, mouseY) {
actualX = mouseX - buttonObj.x
actualY = mouseY - buttonObj.y
mousesqX = actualX * actualX
mousesqY = actualY * actualY
sqR = buttonObj.r * buttonObj.r
sqC = mousesqX + mousesqY
if (sqC < sqR) return true;
else return false;
}