我有一个 Protovis 图表,它响应平移/缩放事件,例如网站上的示例,它覆盖了Panel
包含空图表的图表。不幸的是,它捕获了所有Events
喜欢的东西mouseover
,以及mouseout
我的底层图表通常会响应的东西。
这是因为您必须将面板设置为接受所有事件。根据文档,唯一有效的参数是“全部”、“绘制”和“无”
vis.add(pv.Panel) .events("全部")
如何防止缩放Panel
捕获这些事件?或者我怎样才能将它们传递到Panel
下面呢?
我认为这不一定是您想要的答案,但据我所知,没有简单的方法可以将事件传递给较低的元素。但是,如果您的图表与示例类似,您可以简单地更改不可见的顺序Panel
和应该接收事件的标记,从:
vis.add(pv.Dot)
.event('click', function() { alert("clicked") })
// ... etc
vis.add(pv.Panel)
.events("all")
// ... etc
至:
vis.add(pv.Panel)
.events("all")
// ... etc
vis.add(pv.Dot)
.event('click', function() { alert("clicked") })
// ... etc
这将更改标记的 z 顺序,以便点在面板之前接收点击事件。它的即插即用少了一点,因为您必须将面板插入现有图表中的正确位置,但它应该可以工作。
您可以在此处查看基于示例的 jsFiddle:http: //jsfiddle.net/nrabinowitz/Ctxrr/
编辑:根据下面的评论,这种方法可能是缩放事件的问题。在这个更新的小提琴中显示的更好的方法是使不可见Panel
的标记的父级 - 事件会自动从子级到父级,如果子级没有为事件设置监听器,它不会t 干涉父母。因此,只要需要接收事件的所有前景标记都是平移/缩放面板的子级,这应该可以工作。