Javascript d3循环打包如何在两次单击同一节点时不缩小

Javascript d3循环打包如何在两次单击同一节点时不缩小,javascript,d3.js,svg,Javascript,D3.js,Svg,我有一个基于Mike Bostock的例子的可缩放的圆形包装图。在他的示例中,如果单击一个节点,它会放大,如果再次单击同一个节点,它会缩小到根级别。这种行为可以从他的例子中看出。我试图改变这个例子,这样当再次单击同一个节点时,什么都不会发生,视图保持不变。起初,我甚至不知道是什么导致了这种情况下的缩小,但我发现这是以下代码: d3.select("body") .style("background", color(-1)) .on("click", function() { zoom(r

我有一个基于Mike Bostock的例子的可缩放的圆形包装图。在他的示例中,如果单击一个节点,它会放大,如果再次单击同一个节点,它会缩小到根级别。这种行为可以从他的例子中看出。我试图改变这个例子,这样当再次单击同一个节点时,什么都不会发生,视图保持不变。起初,我甚至不知道是什么导致了这种情况下的缩小,但我发现这是以下代码:

d3.select("body")
  .style("background", color(-1))
  .on("click", function() { zoom(root); });

第二次单击同一节点时,将调用“click”函数。但我不明白为什么。这是为svg的背景着色的代码。当单击背景以缩小到根级别时,也会调用它,这是对代码应该做什么的明显解释。有人知道为什么在第二次单击同一节点时调用该代码吗?还有可能如何修改代码,使其仅在点击背景时缩小?

我明白了这一点,并想我会发布它,以防它对任何人都有帮助。似乎当你点击任何一个节点时,它也会在背景上注册为点击,但在他使用的示例中

d3.event.stopPropagation();
要停止在放大时实际调用背景单击函数。在单击任何节点后将该行添加到代码中解决了我的问题