javascript - 我无法移动节点,力图不适用于 3.js

标签 javascript d3.js

在上一个问题中,一位用户帮助我解决了一个问题,即不知道如何将图像放在圆圈所在的位置。这次我的问题是我无法拖动节点。这个 gif 说明了我的问题(首先我展示了节点应该如何正常移动,然后我说明了我的问题。)。

enter image description here

为什么会发生这种情况?

var link = g.append("g")
  .attr("class", "links")
  .selectAll("line")
  .data(graph.links)
  .enter().append("line")
  .attr("stroke", function(d) {
    console.log(d);
    return colorLink(d.group);
  })
  .attr("marker-end", "url(#arrow)");

var node = g.selectAll("g.node")
  .data(graph.nodes)
  //.filter(function(d){ return d.type=="circle"; })
var NodeCircleEnter= node.enter().append("g")
  .attr("class","node")
  .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })

  NodeCircleEnter
  .append("circle")
  .attr("r", 20)
  .attr("fill", function(d) {
    return colorNode(d.group);
  })
  .style("stroke", function(d) {
    return colorNode(d.group);
  })

// Append images
var images = NodeCircleEnter.append("svg:image")
    .attr("xlink:href",  function(d) {console.log(d); return d.image;})
    .attr("x", function(d) { return -25;})
    .attr("y", function(d) { return -25;})
    .attr("height", 50)
    .attr("width", 50);

这是我的完整代码:

https://plnkr.co/edit/9uH13N3or3G9VTgQlMm9?p=preview

最佳答案

您的事件处理程序需要应用于元素本身,而不是整个 Canvas 。

在此代码中(仅存在于您的 Plunker 项目中,但不存在于您的问题中):

var drag_handler = d3.drag()
  .on("start", drag_start)
  .on("drag", drag_drag)
  .on("end", drag_end);

drag_handler(node);

你的变量node是绘图。您实际上想要一个元素集合来影响您从 .enter() 等函数中获得的元素。您的变量 NodeCircleEnter 包含该集合,因此特定行应该是:

drag_handler(NodeCircleEnter);

这仍然留下了一个问题,即拖动标签本身不起作用。这是因为标签不是您设置处理程序的元素的子元素。

关于javascript - 我无法移动节点,力图不适用于 3.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55081942/

相关文章:

javascript - 使用 d3js 顺序动画 SVG

javascript - D3 map 上每个 SVG 圆的不同工具提示

javascript - 将鼠标滚轮/滚动事件从一个 div 转移到另一个 div

javascript - 在 Grunt 运行时,收到 : "no "uglify"targets found

javascript - 如何更改c3js中的工具提示内容

javascript - 将 `enter` selectin 合并到 `update` selections

javascript - D3.js - 如何更改缩放标签的位置

javascript - 错误 : function crashed out of request scope Function killed

javascript - ES6 : how to split an async generator function without losing yield ability

javascript - 使用 wkhtmltopdf 转换 PDF 后未显示更改的值