我使用以下内容在画布中生成行:
var offset = 20;
var rowHeight= 17;
for (var row=1;row<20;row++)
{
var yfrom = 4 + offset * row;
ctx.strokeRect(0, yfrom, 300, rowHeight);
}
现在给出一个说posY的鼠标位置,确定鼠标是否在一行上最快,更有效的方法是什么,哪一行?
我可以通过搜索每一行来轻易地强制它,但我知道有一个更好的方法,但我无法绕过数学计算它。
答案 0 :(得分:3)
方法1:
您可以在行的上y坐标上进行二分搜索。获得鼠标Y坐标所在的两行位置后,可以检查它是否位于行矩形内。
方法2:
或者因为你在计算:
yfrom = 4 + offset * row;
您可以反算
(Y - 4)/offset;
现在说这个数字是3.6
现在检查Y
是否在行号中。 3 or 4
。
答案 1 :(得分:1)
感谢Abhishek Bansal,我得到了我正在寻找的答案。所以要计算行我使用Abhishek方法:
var row = (Y - 4)/offset;
为了知道我是否在行内,我计算除法的余数(模数),如果它小于或等于行高,那么我在行中,如果我在外面更大:
var inRow = (Y - 4)%offset <= rowHeight