如何与下面的元素进行交互?

时间:2017-09-14 01:49:24

标签: javascript d3.js

我遇到了一个问题,我无法与最近完全被其他元素覆盖的元素进行交互。以下是代码:

  

  
var data = [ [40, "blue"], [80, "red"] ];

var g = d3.select("#container").append("svg")
  .attr({
    width: 300,
    height: 300,
  })
  .style("border", "1px solid #ccc")
  .append("g")
  .attr("transform", "translate(150,150)");

g.selectAll("circle").data(data)
  .enter()
  .append("circle")
  .attr({
    r: function(d){ return d[0]; },
    fill: function(d){ return d[1]; },
    "fill-opacity": 0.5
  })
  .on("mouseenter", onMouseEnter)
  .on("mouseleave", onMouseLeave)
  .on("mousemove",  onMouseMove)
  .on("mouseover",  onMouseOver)
  .on("mouseout",   onMouseOut);

function onMouseEnter(d){
  console.log(d[1] + ": Mouse Enter");
}
function onMouseLeave(d){
  console.log(d[1] + ": Mouse Leave");
}
function onMouseMove(d){
  console.log(d[1] + ": Mouse Move");
}
function onMouseOver(d){
  console.log(d[1] + ": Mouse Over");
}
function onMouseOut(d){
  console.log(d[1] + ": Mouse Out");
}
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

<div id="container"></div>

enter image description here

无论在蓝色圆圈上委托哪个鼠标事件,您都无法收到任何响应,只是因为它被大红色圆圈完全覆盖。

最后我明白了将一个mousemove事件委托给“g”元素(圆圈的父节点)并检测哪个圆圈是最接近的一个,然后做一些事情。所以我的问题是,有没有聪明的方法来与下面的元素进行交互?

0 个答案:

没有答案