d3.js - d3.event.active 用于拖放圆圈的目的

标签 d3.js

我大致熟悉 d3 中拖动的工作原理。但是最近我发现了一些让我感到困惑的事情。

下面通过代码创建一个f orce directed graph我无法按照代码来处理拖动节点:

function dragstarted(d) {
  if (!d3.event.active) simulation.alphaTarget(0.3).restart();
  d.fx = d.x;
  d.fy = d.y;
}

function dragged(d) {
  d.fx = d3.event.x;
  d.fy = d3.event.y;
}

function dragended(d) {
  if (!d3.event.active) simulation.alphaTarget(0);
  d.fx = null;
  d.fy = null;
}

知道为什么我们要在 dragstarted 和 dragended 中检查 if 语句吗?

我尝试删除 if 条件,并没有真正看到与力有向图有太大区别。也就是说,而不是
if (!d3.event.active) simulation.alphaTarget(0.3).restart(); 

我放
simulation.alphaTarget(0.3).restart();

并没有看到太大的区别。

最佳答案

active属性描述 here .它指示当前正在进行的拖拽事件的数量,而不是当前正在触发的事件,并且仅与多点触控场景真正相关。使用此检查的原因是只要发生至少一个事件阻力,就可以保持模拟运行。

例如,如果没有发生事件拖动,并且您开始拖动,则在 dragstarted d3.event.active将为 0,力模拟将启动。如 d3.event.active !== 0 ,那么已经有阻力发生并且模拟已经在进行中。

同样,在 dragended , 如果 d3.event.active !== 0 ,然后另一个阻力仍在发生,我们不想停止模拟。如 d3.event.active === 0 ,那么这是最后一个阻力,我们想停止模拟。

关于d3.js - d3.event.active 用于拖放圆圈的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42605261/

相关文章:

javascript - Rails 4 : "//= require_tree ." in application. js 不包含我的 js 文件在/app/assets/javascripts

css - d3 图形内的文本颜色

javascript - Pie Chat 没有显示在浏览器中我使用的是带有简单 HTML 的 D3

javascript - D3 CSV 列空间解析

javascript - 强制导向的超链接不起作用

javascript - 如何查看 angularjs 指令中的属性?

javascript - "Stuttering"使用 d3.behavior.drag() 和变换时拖动

javascript - 使用绑定(bind)到多个组元素的数据来绑定(bind)新元素的更优雅的方式

javascript - 具有可折叠缩放功能的网络可视化 d3 示例

javascript - 如何计算 json 中树元素的大小属性?