javascript - 如果我将 svg 附加到 div,d3 mouseover 事件不会触发

标签 javascript d3.js svg

我正在尝试通过简单的鼠标悬停来处理 d3 中的某些矩形。如果我将 SVG 附加到“body”,一切都会正常(第一行代码)。如果我将选择更改为“.chart1”而不是“body”,则鼠标悬停不起作用。有人见过这个吗?

var chart = d3.select(".chart1").append("svg")
  .attr("width", 250)
  .attr("height", 50);

data = ["a", "b", "c",]

for(var i = 0; i < data.length; i++){
            var rect = chart.append("rect")
              .attr("x", 20*i)
              .attr("y", 10)
              .attr("width", 15)
              .attr("height", 15)

chart.selectAll('rect')
    .on("mouseover", function() {
        d3.select(this)
            .attr("opacity", .5)
    })
    .on("mouseout", function() {
        d3.select(this)
            .attr("opacity", 1)
    });

jsfiddle:https://jsfiddle.net/jasonleehodges/um5f5ysv/

最佳答案

问题不是因为您将 svg 附加到带有类 .chart1 的 body 或 div

鼠标悬停不起作用的问题就在这里。

var chart = d3.select(".chart1").append("svg")
  .attr("width", 250)
  .attr("height", 50)
  //.style("pointer-events", "none");//WHY DISABLE MOUSE EVENT ON SVG

修复方法是删除 .style("pointer-events", "none"); 并且它适用于所有情况,没有任何异常。

工作代码here

另一方面,你不应该使用 for 循环,这不是 d3 方式(如 @Gerardo Furtado 所说)。

所以你的代码是for:

for(var i = 0; i < data.length; i++){
            var rect = chart.append("rect")
              .attr("x", 20*i)
              .attr("y", 10)
              .attr("width", 15)
              .attr("height", 15)

应该是

var rect = chart.selectAll("rect").data(data).enter().append("rect")
              .attr("x", function(d,i){return 20*i})
              .attr("y", 10)
              .attr("width", 15)
              .attr("height", 15)
              .attr("fill", "#cc004c")
              .attr("title","NBC")
              .attr("data-toggle","tooltip")

工作代码here

关于javascript - 如果我将 svg 附加到 div,d3 mouseover 事件不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449570/

相关文章:

javascript - 使用 d3js 绘制平行测量符号线

javascript - 在 NodeJS 上重定向图像请求

javascript - Canvas获取图像的触摸事件

javascript - D3 相当于 jQuery 的子选择器?

html - polymer 如何在图标中包含 svg 文件?

html - 我在 svg 文件中工作,动画在 firefox 中不起作用,我在图像标签中使用 svg

svg - 如何根据视口(viewport)调整 SVG 变换?

JavaScript 无法在 Asp 上运行。网

javascript - 转换 2014-11-03T00 :00:00 to yyyy-mm-dd in javascript

d3.js - nvd3.js 中的 useInteractiveGuideline() 问题