通过Protovis面板传递事件

时间:2011-12-03 23:16:31

标签: javascript javascript-events protovis

我有一个Protovis图表,响应平移/缩放事件,例如website上的示例,其中包含保存图表为空的Panel。不幸的是,它会捕获我的基础图通常会响应的所有Events mouseovermouseout

这是因为您必须将Panel设置为接受所有事件。根据{{​​3}},唯一有效的参数是'全部','画'和'无'

  

vis.add(pv.Panel)         .events( “ALL”)

如何阻止缩放Panel捕获这些事件?或者我如何将它们传递到它下面的Panel

1 个答案:

答案 0 :(得分:0)

我认为这不一定是你想要的答案,但据我所知,没有简单的方法将事件传递给较低的元素。但是,如果您的图表与示例相似,则只需更改不可见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/

编辑:根据以下评论,此方法可能是缩放事件的问题。 this updated fiddle中显示的更好的方法是使隐形Panel成为所讨论标记的父级 - 事件将自动从子级映射到父级,如果子级未设置监听器对于一个事件,它不会干扰父母。因此,只要需要接收事件的所有前景标记都是平移/缩放面板的子级,这应该可以。