javascript - 单击和双击 d3 力定向图中的节点

标签 javascript d3.js visualization d3-force-directed

我正在创建一个 d3 力导向图。我的要求是同时单击和双击一个节点。
单击时,我需要执行不同的任务,双击时,我需要执行其他一些任务。

我的代码是这样的:

var node = svg.append("g")
          .attr("class", "nodes")
          .selectAll("circle")
          .data(graph.nodes)
          .enter().append("circle")
          .attr("cx", function(d) { return d.x; })
          .attr("cy", function(d) { return d.y; })
          .attr("r", 5)
          .on("click",function(d){ alert("node was single clicked"); })
          .on("dblclick",function(d){ alert("node was double clicked"); })

这里的问题是,即使我双击节点,也会调用单击函数。

如何防止在双击节点时调用 click 函数。
也就是说,当节点被单击时,则调用click函数,当双击时,则调用dblclick函数。

非常感谢任何能帮我解决这个问题的人。

最佳答案

您可以使用 setTimeout 区分单击和双击,查看演示:

var timeout = null;

d3.select('rect').on("click", function(d) {
    clearTimeout(timeout);
    
    timeout = setTimeout(function() {
      console.clear();
      console.log("node was single clicked", new Date());
    }, 300)
  })
  .on("dblclick", function(d) {
    clearTimeout(timeout);
    
    console.clear();
    console.log("node was double clicked", new Date());
  });
rect {
  fill: steelblue;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
Open the console and click / double click on the rect:
<svg width="400" height="110">
  <rect width="100" height="100" />
</svg>

关于javascript - 单击和双击 d3 力定向图中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49357718/

相关文章:

javascript - 将 div margin-top 设置为屏幕高度(在 iframe 内,跨浏览器)

javascript - 如何在 Javascript 和 D3.js 折线图中通过 stomp.js 绘制来自 Web 套接字消息的实时数据?

graph - 饼图中的负值

r - 在 R 中以日期为 X 轴绘图

javascript - 折线图的 'enter' 选择可以设置动画吗?

elasticsearch - 在 Kibana 中可视化单个文本字符串

javascript - Node.js - Mocha did() 方法在之前的测试中导致错误

javascript - 短 IF 抛出 TypeError,如果工作正常则正常 - 相同的条件,为什么?

Javascript:Div 正在打开但没有向后折叠

javascript - D3.JS 关于在同一页中绘制 3 个图表以及更多内容