【问题标题】:Changing interactions from D3 v3 to v4将交互从 D3 v3 更改为 v4
【发布时间】:2019-06-09 18:49:21
【问题描述】:

我花了更多的 5 个小时将这个 pie chart 更改为 D3 v4,但它仍然不能正常工作(即交互没有运行)。

这里是设置它们的位置:

paths.enter()
    .append('svg:path')
    .attr('d', arc)
    .style('fill', function(d, i) {
        return color(i);
    })
    .style('stroke', '#FFFFFF')
    .on(eventObj)

【问题讨论】:

    标签: javascript d3.js events data-visualization


    【解决方案1】:

    如您所见,在 D3 v3 示例中,selection.on...

    paths.on(eventObj)
    

    ...接收具有所有类型侦听器的 object

    var eventObj = {
        'mouseover': function(d, i, j) {
            //etc...
        },
        'mouseout': function(d, i, j) {
            //etc...
        },
        'click': function(d, i, j) {
            //etc...
        }
    };
    

    这就是问题所在:这在 D3 v3 中有效,但在 v4 中无效。

    看看这个演示,使用 D3 v3(悬停在圆圈上):

    const events = {
      "mouseover": function() {
        console.log("mouseover")
      },
      "mouseout": function() {
        console.log("mouseout")
      }
    };
    
    d3.select("circle").on(events)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
    <svg>
      <circle cx="100" cy="50" r="25"></circle>
    </svg>

    现在是完全相同的代码,但使用的是 D3 v4:

    const events = {
      "mouseover": function() {
        console.log("mouseover")
      },
      "mouseout": function() {
        console.log("mouseout")
      }
    };
    
    d3.select("circle").on(events)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
    <svg>
      <circle cx="100" cy="50" r="25"></circle>
    </svg>

    它不起作用。它不会抛出任何错误,它只是默默地失败。

    解决方案:分别设置每个事件监听器:

    paths.on("mouseover", etc...)
        .on("mouseout", etc...)
        .on("click", etc...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      相关资源
      最近更新 更多