如果我的画布上有一个圆圈,在点击它时会改变颜色,我可以在画布元素上使用click事件并处理该数学(距离公式计算< = radius)。但是,如果我有两个重叠的圆圈(如范图),我点击两个圆圈的中间,假设只有顶部圆圈应该改变颜色?如果在这种情况下应用第一个圆的数学运算,则两个圆都会改变颜色。
如何在重叠对象方面处理画布中的事件,如上例所示?希望有一个快速/有效的算法?
答案 0 :(得分:1)
Canvas并不像Flash那样,或者像DOM树,因为事物有排序顺序或z索引。它有点像一个平坦的光栅图像,你必须依靠你的javascript中的其他逻辑来记住序列&堆积你绘制的东西的顺序。
如果你需要这种互动性,我总是发现最好使用第三方图书馆(除非它只是一个或两个圆圈的情况,并没有做太多)。
对于基于交互式“形状”的javascript图形,我会使用Raphael.js或D3,它实际上比SVG工具更多,所以也许它不适合你,但它们很简单并且是跨浏览器的。
还有processing.js(处理Java库的js端口)感觉有点像闪存,并且可以再次跟踪所有级别和对象。除了其他话题之外,还有其他一些主题。
如果它超级简单,选项可能是:
答案 1 :(得分:1)
你可能想要一个像EaselJS这样的框架,它对你正在尝试做的事情有更好的api。 Barebones canvas 2d-context在显示对象/精灵行为方面没有提供太多。
上面的回复还提到了某种表示图层的列表。我不认为实施会非常困难,只是另一个需要检查半径的条件。