Mouseevent div覆盖图表上的div

时间:2016-02-01 07:30:56

标签: javascript d3.js mouseevent gantt-chart

我在d3.js甘特图中有一个甘特图。我使用滚动和缩放甘特图:http://codepen.io/Pau/pen/FKzEa

但我有问题。这是我的修改:http://codepen.io/anon/pen/pgVdgm当用户将鼠标悬停在线或任务上时,我想添加mouseevent(简单警报)。但这并不起作用。我将这些事件添加到了行和任务中:

        svg.select(".gantt-chart-canvas").append("line").attr(
          {
          "class":"verticalDeadLine",
          "x1" : x(testDate),
          "y1" : 0,
          "x2" : x(testDate),
          "y2" : height,
          "fill" : "none",
          "shape-rendering" : "crispEdges",
          "stroke" : "red",
          "z-index" : "550",
          "stroke-width" : "2px"
      }).on('mouseover', function(event) {
            alert("abcd");
        })
        .on('mouseout', function() {

      });

我认为问题出在这一行,其中添加了rect,类窗格

chart.append("rect")
    .attr("class", "pane")
    .attr("width", width)
    .attr("height", height-margin.top-margin.bottom)
    .attr("transform", "translate(" + margin.left + ", " + margin.top + ")");
css类中的

窗格:

.pane {
  fill: none;
  pointer-events: all;
}

这个div覆盖了行和任务鼠标。

当我在班级窗格中更改pointer-events: all;pointer-events: auto;

时,鼠标在线和任务上工作正常

但是在这个改变之后,我的缩放和滚动不起作用......

如何改变?我想在线上缩放滚动图表和鼠标在线,任务都可以。我想我必须改变行类的pointer-events属性。但是如何?

摘要,更简单的例子。我有两节课。

<div class="A">
    <div class="B">
    </div">
</div">

这两个类都有mousevent,但是A类覆盖类B.如何设置两个mousevents都有效?

1 个答案:

答案 0 :(得分:1)

第一次改变:

fill

制作transparent none
.pane {
  cursor: move;
  fill: transparent;
  pointer-events: auto;
}

第二次更改会使矩形位于.gantt-chart class group

之上

像这样:

var chart = d3.select("body")
                  .append("svg")
                    .attr("class", "chart")
                    .attr("width", width + margin.left + margin.right)
                    .attr("height", height + margin.top + margin.bottom);
var drw = chart.append("rect")
        .attr("class", "pane")
        .attr("width", width)
        .attr("height", height-margin.top-margin.bottom)
        .attr("transform", "translate(" + margin.left + ", " + margin.top + ")");
 //now append ganttchart group
var svg = chart.append("g")
                    .attr("class", "gantt-chart")
                    .attr("width", width)
                    .attr("height", height-margin.top-margin.bottom)
                    .attr("transform", "translate(" + margin.left + ", " + margin.top + ")");

工作代码here

希望这有帮助!