javascript - 在D3中,如何有条件地禁用双击缩放?

标签 javascript d3.js

在 D3.js 中,您可以使用以下代码片段禁用双击缩放。

.on("dblclick.zoom", null);

在我的场景中,svg 中有circles,如果双击 svg 它应该会放大,但是如果双击任何circle 元素,应禁用缩放。

我有一个选择

d3.select('svg').selectAll('image').on('dblclick', () => {
  event.stopPropagation();
});

这可行,但我当前的设置无法使用此选项。

我想知道是否有任何方法可以检查条件,然后使用类似的方法禁用缩放 -

on("dblclick.zoom", () => {
  if (event.target.localName == 'circle') {
    // disable zoom
  } else {
    // enable zoom
  }
});

编辑

你可以在我重现问题的地方找到 fiddle - https://jsfiddle.net/bhnbhushan/dnzpyjx0/2/

最佳答案

我认为你有两个选择。您可以执行您建议的操作,即利用事件委托(delegate)检查 event.target 是否为 circle 元素。请注意,在 d3 中,您可能需要 Hook d3.event而是访问目标

d3.zoom 还提供了一种使用 zoom.filter 进行过滤的方法同样,您可以传入您想要 Hook 的条件,即检查 d3.event.target 是否是一个圆。

编辑:听起来您正在使用 d3.v3,它的 API 不支持处理这些用例。我强烈建议升级。

关于javascript - 在D3中,如何有条件地禁用双击缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55742502/

相关文章:

javascript - XML/javascript 解析节点 - 按名称指定子节点

javascript - 通过 jQuery 为将来创建的元素添加 CSS 规则

javascript - d3.js - v3 和 v4 - 输入和更新差异

javascript - D3.js ~ 如何过滤包含某些值/单词的数据值?

css - 如何使用 D3 在鼠标悬停时模糊图像?

javascript - 简单的 JavaScript 错误让我发疯

javascript - 如何在用户单击后退按钮或离开时执行功能。以及如何延迟它?

javascript - AngularJS:让用户识别图像内矩形对象的 Angular 点

d3.js - 使用鼠标事件定位 this->sibling

javascript - 将组元素重新排序为特定顺序