Javascript 通过Protovis面板传递事件

Javascript 通过Protovis面板传递事件,javascript,javascript-events,protovis,Javascript,Javascript Events,Protovis,我有一个Protovis图形,它对平移/缩放事件做出响应,如上的示例,它覆盖了面板,其中包含一个空的图形。不幸的是,它捕获了所有事件,比如mouseover和mouseout,我的底层图形通常会响应这些事件 这是因为您必须将面板设置为接受所有事件。根据,唯一有效的参数是“全部”、“绘制”和“无” 可视添加(光伏板) .事件(“全部”) 如何防止缩放面板捕获这些事件?或者我如何将它们传递到它下面的面板?我不认为这一定是您想要的答案,但据我所知,没有简单的方法将事件传递到较低的元素。但是,如果您的图

我有一个Protovis图形,它对平移/缩放事件做出响应,如上的示例,它覆盖了
面板
,其中包含一个空的图形。不幸的是,它捕获了所有
事件
,比如
mouseover
mouseout
,我的底层图形通常会响应这些事件

这是因为您必须将面板设置为接受所有事件。根据,唯一有效的参数是“全部”、“绘制”和“无”

可视添加(光伏板) .事件(“全部”)


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

我不认为这一定是您想要的答案,但据我所知,没有简单的方法将事件传递到较低的元素。但是,如果您的图形与示例类似,您只需更改不可见的
面板的顺序以及应接收事件的标记,如下所示:

vis.add(pv.Dot)
    .event('click', function() { alert("clicked") })
    // ... etc

vis.add(pv.Panel)
    .events("all")
    // ... etc
致:

这将更改标记的z顺序,以便点在面板之前接收单击事件。它少了一点即插即用,因为您必须在现有图形中的正确点插入面板,但它应该可以工作

您可以在下面的示例中看到一个JSFIDLE:


编辑:根据下面的评论,这种方法可能是缩放事件的问题。如中所示,更好的方法是使不可见的
面板
成为有问题标记的父级-事件将自动在子级和父级之间冒泡,如果子级未为事件设置侦听器,则不会干扰父级。因此,只要需要接收事件的所有前景标记都是平移/缩放面板的子项,这应该可以工作。

不幸的是,当您像这样重新排列面板时,这些标记将干扰平移/缩放事件。当光标位于标记上方时,用户可以进行平移/缩放。缩小时,一个标记会滑到光标下,你会一直跳到下一页。@smith324-请查看上面我的更新。如果这种方法可行的话,它比我的第一个建议要好。它确实可以正确缩放,但现在平移功能不能正常工作(过于夸张)。我现在没有时间,但稍后将尝试调试它。
vis.add(pv.Panel)
    .events("all")
    // ... etc

vis.add(pv.Dot)
    .event('click', function() { alert("clicked") })
    // ... etc