This question already has answers here:
Events attached to object inside canvas
(3个答案)
3年前关闭。
是否有任何算法可以确定单击的位置是否在未变形的物体内部?
我是画布新手。但是,很容易知道鼠标坐标在形状的对象中,尤其是在矩形中。但是,不定形的物体或球体/六边形/八边形等如何?
例如,我有以下代码。然后,如何实现确定鼠标单击的坐标是否在对象区域内的逻辑?
(3个答案)
3年前关闭。
是否有任何算法可以确定单击的位置是否在未变形的物体内部?
我是画布新手。但是,很容易知道鼠标坐标在形状的对象中,尤其是在矩形中。但是,不定形的物体或球体/六边形/八边形等如何?
例如,我有以下代码。然后,如何实现确定鼠标单击的坐标是否在对象区域内的逻辑?
function drawShape(){
var canvas = document.getElementById("cnvs");
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(20,0);
ctx.lineTo(30,10);
ctx.lineTo(30,50);
ctx.lineTo(45,100);
ctx.lineTo(60,45);
ctx.lineTo(55,30);
ctx.lineTo(90,45);
ctx.lineTo(100,100);
ctx.lineTo(50,150);
ctx.lineTo(45,160);
ctx.lineTo(20,100);
ctx.lineTo(10,50);
ctx.closePath();
ctx.fill();
$(canvas).click(function(){
var canvas = this;
var event = window.event;
alert(event.pageX - canvas.offsetLeft);
});
}
drawShape();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<canvas id="cnvs" width="200" height="200">
</canvas>
最佳答案
您需要为可能期望的每种形状分别定义该逻辑。
圆是最简单的,您可以检查圆的中心与鼠标坐标之间的距离是否小于圆的半径。
但是,有一种用于任意多边形的算法:
从单击的点向任意方向投射射线。
检查射线与形状的每个部分的交点。
计算此类交叉点的数量。如果是偶数,则该点位于形状之外;如果是奇数,则该点位于形状内。
关于javascript - 如何确定在Canvas中未变形的对象内单击的位置? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40206595/
10-09 17:43