如何在D3.js可视化上添加弹出窗口(树节点)

uajslkp6  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(372)

我们使用d3.js树(d3.tree())来呈现组织结构图可视化。
我想在单击/鼠标悬停某个按钮时在节点上显示一个小弹出窗口。例如,单击人物图像会显示一个带有更多操作的小弹出窗口。因此,用户可以单击弹出窗口中的任何链接。
在D3 js中有没有什么推荐的方法来实现它?

bzzcjhmw

bzzcjhmw1#

当你更新Nodes时,你可以附加click或mouseover的事件监听器。

// Updating nodes
const nodesSelection = centerG.selectAll('g.node')
  .data(nodes, d => d.id)

// Enter any new nodes at the parent's previous position.
var nodeEnter = nodesSelection.enter().append('g')
  .attr('class', 'node')
  .attr("transform", function(d) {
    return "translate(" + source.x0 + "," + source.y0 + ")";
  })
  .attr('cursor', 'pointer')
  .on('click', function(d) {
    if ([...d3.event.srcElement.classList].includes('node-button-circle')) {
      return;
    }
    attrs.onNodeClick(d.data.nodeId);
  })

如果您在此处选中onclick,则它正在调用NodeClick方法,您将需要更改NodeClick,或者如果您需要mouseover方法,则需要添加.on('mouseover ')事件。如果您希望将图像定位到节点中,则需要在此处添加事件

nodeUpdate.selectAll('.node-image-group')
  .attr('transform', d => {
    let x = -d.imageWidth / 2 - d.width / 2;
    let y = -d.imageHeight / 2 - d.height / 2;
    return `translate(${x},${y})`
  })

nodeUpdate.select('.node-image-rect')
  .attr('fill', d => `url(#${d.id})`)
  .attr('width', d => d.imageWidth)
  .attr('height', d => d.imageHeight)
  .attr('stroke', d => d.imageBorderColor)
  .attr('stroke-width', d => d.imageBorderWidth)
  .attr('rx', d => d.imageRx)
  .attr('y', d => d.imageCenterTopDistance)
  .attr('x', d => d.imageCenterLeftDistance)
  .attr('filter', d => d.dropShadowId)

相关问题