按y位置查找哪一行

Find which row by y position

本文关键字:一行 位置 查找      更新时间:2023-09-26

我使用以下命令在画布中生成行:

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,那么确定鼠标是否在一行,以及在哪行,最快、更有效的方法是什么?

我可以很容易地通过搜索每一行来强行使用它,但我知道有更好的方法,但我无法理解它的数学。

方法1:
您可以对行的上y坐标进行二进制搜索。一旦得到鼠标Y坐标所在的两行的位置,就可以检查它是否位于行矩形内。

方法2:
或者既然你在计算:

yfrom = 4 + offset * row;

您可以反向计算

(Y - 4)/offset;

现在假设这个数字是3.6

现在检查Y是否位于第3 or 4行。

多亏了Abhishek Bansal,我得到了我想要的答案。因此,为了计算行,我使用Abhishek方法:

var row = (Y - 4)/offset;

为了知道我是否在行内,我计算除法的余数(模数),如果它小于或等于行高,那么我在行内;如果更大,我在外:

var inRow = (Y - 4)%offset <= rowHeight