将事件处理程序附加到nvd3图表的标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将事件处理程序附加到nvd3图表的标签相关的知识,希望对你有一定的参考价值。

我试图将click事件处理程序附加到x轴上的nvd3 discreteBarcharts'标签。这是代码:

labelClick = () => {
 console.log("label was clicked!!!");
}

drawBarChartWithData = (node, clusterData) => {
 console.log("drawBarchartWithData method called");
 var that = this;
   nv.addGraph(function() {
      var chart = nv.models.discreteBarChart()
          .x(function(d) { return d.label })
          .y(function(d) { return d.value })
          .staggerLabels(true)
          //.staggerLabels(historicalBarChart[0].values.length > 8)
          .showValues(false)
          .duration(250)
          ;
      d3.select(node)
          .datum(clusterData)
          .call(chart);

--------> d3.select(node)
        .selectAll('.tick')
          .on('click', that.labelClick); <----------

nv.utils.windowResize(chart.update);

      return chart;
  }.bind(this));
} 

上面用箭头突出显示的代码是我试图添加处理程序的方式。我也尝试了nv.addGraph函数之外的相同代码并提供了事件处理函数:

       d3.select(node)
        .selectAll('.tick')
          .on('click', function(d) {
            console.log(d + "label was clicked!!!");
          });

我也试过.selectAll('text')selectAll('.x.axis .tick')而不是.selectAll('.tick')

我在这做错了什么?任何建议将不胜感激。

答案

对于具有pointer-events: none;类的元素,NVD3具有默认样式nv-axis

enter image description here此样式禁用单击事件处理,因此您必须覆盖它。您可以使用以下代码实现它:

d3.select(node)
  .selectAll('.nv-x.nv-axis, .nv-x .nv-axis')
  .style('pointer-events', 'all');

d3.select(node)
  .selectAll('.nv-x .tick')
  .on('click', function() {
    /* ... */
  });

检查working demo

以上是关于将事件处理程序附加到nvd3图表的标签的主要内容,如果未能解决你的问题,请参考以下文章

Nvd3.js - 向累积图表添加多个 y 轴

带有 nvd3.js 的实时线图

如何将 angularjs-nvd3 图表导出到文件

NVD3 图表无法在 Chrome 中计算图例文本长度,因为 Window.getComputedStyle 未正确返回字体大小

将“onclick”事件附加到 D3 图表背景

如何使用 nvd3 在柱形图上定位旋转的 x 轴标签?