Javascript 将点击事件添加到Zynga';s新的画布滚动API

Javascript 将点击事件添加到Zynga';s新的画布滚动API,javascript,canvas,scroll,Javascript,Canvas,Scroll,如果你在HN上错过了它,Zynga为Canvas开源了一个很棒的平铺/滚动API 如何将单击事件添加到此单元格的每个单元格?不需要精确的代码,只需要知道从哪里开始。我还没有花足够的时间在画布上,但我认为这是一个好的开始 我希望能够得到被点击的单元格,并在其中进行查询。像 context.click(function(e) { alert(e.hasSpecificAttribute); }) 我以前没有用过这个,但是从我刚刚用它的几分钟来看,我认为你必须自己计算这个细胞 如果您运行他们的

如果你在HN上错过了它,Zynga为Canvas开源了一个很棒的平铺/滚动API

如何将单击事件添加到此单元格的每个单元格?不需要精确的代码,只需要知道从哪里开始。我还没有花足够的时间在画布上,但我认为这是一个好的开始

我希望能够得到被点击的单元格,并在其中进行查询。像

context.click(function(e) {
  alert(e.hasSpecificAttribute);
})

我以前没有用过这个,但是从我刚刚用它的几分钟来看,我认为你必须自己计算这个细胞

如果您运行他们的演示(这里有人公开主持),您会注意到画布版本与基于DOM的选项不同。基于DOM的选项实际上使用
div
元素,因此您可以使用类和/或id轻松地选择单元格。不过,canvas版本似乎使用了一个大画布

他们的演示页面显示影响水平和垂直偏移的当前滚动值。您应该能够抓取它们,并将它们与用户在父容器中单击的位置以及每个单元格的宽度和高度结合起来,以确定单击了哪个单元格。例如:

var x_cell = Math.floor((scroll_x + click_x) / cell_width);
var y_cell = Math.floor((scroll_y + click_y) / cell_height);

但是请注意,这实际上不允许您查询该单元格中画布上的像素。这个API中的单元格似乎是一个抽象概念,并不是画布结构的一部分(也就是说,画布上的小元素并不多)。因此,您可能需要使用单元格坐标来确定画布上可以使用的区域。这将非常简单,只需
context.getImageData(x_cell*cell\u width,y_cell*cell\u height,cell\u width,cell\u height)

我以前没有使用过这个,但从我刚刚使用它的几分钟来看,我认为您必须自己计算单元格

如果您运行他们的演示(这里有人公开主持),您会注意到画布版本与基于DOM的选项不同。基于DOM的选项实际上使用
div
元素,因此您可以使用类和/或id轻松地选择单元格。不过,canvas版本似乎使用了一个大画布

他们的演示页面显示影响水平和垂直偏移的当前滚动值。您应该能够抓取它们,并将它们与用户在父容器中单击的位置以及每个单元格的宽度和高度结合起来,以确定单击了哪个单元格。例如:

var x_cell = Math.floor((scroll_x + click_x) / cell_width);
var y_cell = Math.floor((scroll_y + click_y) / cell_height);

但是请注意,这实际上不允许您查询该单元格中画布上的像素。这个API中的单元格似乎是一个抽象概念,并不是画布结构的一部分(也就是说,画布上的小元素并不多)。因此,您可能需要使用单元格坐标来确定画布上可以使用的区域。这将非常简单,只需
context.getImageData(x_cell*cell\u width,y_cell*cell\u height,cell\u width,cell\u height)

感谢您富有洞察力的回答,我将亲自深入研究计算。你是对的,这看起来很低层次,也许我需要先在上面构建更多。谢谢你富有洞察力的回答,我会自己更深入地研究计算。你是对的,这看起来是较低的水平,也许我需要建立更多的上面第一。