首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Chartjs重叠点击功能不起作用

Chartjs重叠点击功能不起作用
EN

Stack Overflow用户
提问于 2018-12-14 02:57:55
回答 1查看 487关注 0票数 0

我有一个简单的折线图,当两个或更多的点太近时,我就会有问题。问题是:工具提示显示一个点,而单击功能用于其他点。

在本例中,您可以看到,当我单击红线(值2)上的第一个点时,单击事件针对的是黑线(值0)

例如:https://codepen.io/ataufo/pen/NexppY

代码语言:javascript
复制
var canvas = document.getElementById("lineChart");
var ctx = canvas.getContext('2d');


var data = {
  labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  datasets: [{
      label: "Stock A",
      fill: false,
      lineTension: 0.1,
      backgroundColor: "rgba(225,0,0,0.4)",
      borderColor: "red", 
      borderCapStyle: 'square',
      pointBorderWidth: 0.1,
      pointHoverRadius: 6,
      pointHoverBorderWidth: 2,
      pointRadius: 1,
      data: [2, 59, 80, 81, 56],
      spanGaps: false,
      datalabels: {
        enabled: true,
        allowOverlap: true,
        display: true,
        listeners: {
          click: function(context) {
            alert(context.dataIndex + " Red line");
          }
        }
          }
    }, {
      label: "Stock B",
      fill: false,
      lineTension: 0.1,
      backgroundColor: "black",
      borderColor: "black", 
      borderCapStyle: 'square',
      pointBorderWidth: 0.1,
      pointHoverRadius: 6,
      pointHoverBorderWidth: 2,
      pointRadius: 1,
      data: [0, 20, 60, 95, 64],
      spanGaps: false,
      datalabels: {
        enabled: true,
        allowOverlap: true,
        display: true,
        listeners: {
          click: function(context) {
            alert(context.dataIndex + " Black Line");
          }
        }
      }
    }

  ]
};

// Chart declaration:
var myBarChart = new Chart(ctx, {
  showTooltips: false,
  type: 'line',
  data: data
});

有没有人有办法解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 06:06:46

显式引用dataset 0。您需要像这样传递数据集索引:

代码语言:javascript
复制
canvas.onclick = function(evt) {
  var activePoints = myLineChart.getElementAtEvent(evt);
  //console.log(activePoints);
  if (activePoints[0]) {
    var chartData = activePoints[0]['_chart'].config.data;
    var idx = activePoints[0]['_index'];

    var label = chartData.labels[idx];

    // change the following line...
    //var value = chartData.datasets[0].data[idx];
    // to this:
    var value = chartData.datasets[activePoints[0]._chart.tooltip._active[0]._datasetIndex].data[idx];

    var url = "Mês:" + label + " Valor: " + value;
    alert(url);
  }
};

编辑:完整的工作示例。

代码语言:javascript
复制
var canvas = document.getElementById("lineChart");
var ctx = canvas.getContext('2d');


    canvas.onclick = function(evt) {
      var activePoints = myLineChart.getElementAtEvent(evt);
      console.log(activePoints);
      if (activePoints[0]) {
        var chartData = activePoints[0]['_chart'].config.data;
        var idx = activePoints[0]['_index'];

        var label = chartData.labels[idx];
        //var value = chartData.datasets[0].data[idx];
        var value = chartData.datasets[activePoints[0]._chart.tooltip._active[0]._datasetIndex].data[idx];

        var url = "Mês:" + label + " Valor: " + value;
        alert(url);
      }
    };


var data = {
  labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  datasets: [{
      label: "Stock A",
      fill: false,
      lineTension: 0.1,
      backgroundColor: "rgba(225,0,0,0.4)",
      borderColor: "red", 
      borderCapStyle: 'square',
      pointBorderWidth: 0.1,
      pointHoverRadius: 6,
      pointHoverBorderWidth: 2,
      pointRadius: 1,
      data: [2, 59, 80, 81, 56],
      spanGaps: false

    }, {
      label: "Stock B",
      fill: false,
      lineTension: 0.1,
      backgroundColor: "black",
      borderColor: "black", 
      borderCapStyle: 'square',
      pointBorderWidth: 0.1,
      pointHoverRadius: 6,
      pointHoverBorderWidth: 2,
      pointRadius: 1,
      data: [0, 20, 60, 95, 64],
      spanGaps: false
    }

  ]
};

// Chart declaration:
var myLineChart = new Chart(ctx, {
  type: 'line',
  data: data,
  options: {
    tooltips: {
         enabled: true
    }
  }

});
代码语言:javascript
复制
body{
  background-color: #666;
}

#lineChart{
  background-color: wheat;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script>
<div class="container">
  <br />
  <div class="row">
    <div class="col-md-1"></div>
    <div class="col-md-10">
<!--       Chart.js Canvas Tag -->
      <canvas id="lineChart"></canvas>
    </div>
    <div class="col-md-1"></div>
  </div>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53768432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档