D3中的嵌套缩放问题

时间:2013-10-08 13:51:05

标签: javascript svg d3.js

请看我的小提琴:http://jsfiddle.net/haiphong/BRjFE/

您可以按住SHIFT,然后拖放矩形以移动它和周围的圆圈。您也可以按住SHIFT和缩放。此缩放/平移由d3.behavior.zoom()完成。效果很好。

我想在不保持移位的情况下缩放和平移圆圈。所以,我创建了另一个d3.behavior.zoom()。但是,圆圈​​可以缩放但不能平移。通过调试,我看到当我平移圆圈时,处理代码不会执行。

总而言之,当将zoom绑定到外部g元素和内部g元素时,外部适用于缩放/平移;但是,内部仅适用于缩放。如何让它也适用于平底锅?

1 个答案:

答案 0 :(得分:0)

我找到了答案的解决方案。 http://jsfiddle.net/haiphong/BRjFE/4/

当我平移圆圈时,其zoom事件不会触发。但是,它的zoomstart事件会触发,并在其父项zoomstart之前触发。不知何故,当父母的zoomstart开火时,它会吃掉圆圈的事件。

因此,在圆圈的zoomstart中,我强制事件在SHIFT未被保持时停止传播。这会使圈zoom触发。