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