将工具提示放在两个条的中间

Put tooltip on the middle of two bars

我正在尝试将自定义 Chart.js 工具提示放在两个栏的中间。我对 chart.js 文档和不同的帖子进行了研究,但没有找到与使用以下代码段定位它不同的方法(我正在使用 jquery 并切换 class 到hide/show 工具提示,请关注我用来定位工具提示的值):

function setupTooltipPosition(config) {
  const { tooltipElement, tooltipModel } = config;
  const leftOffset = this._chart.canvas.offsetLeft;
  const topOffset = this._chart.canvas.offsetTop;

  tooltipElement.removeClass(tooltipSelectors.hide);
  tooltipElement.css('left', `${tooltipModel.caretX - leftOffset}px`);
  tooltipElement.css('top', `${tooltipModel.carteY - topOffset}px`);
}

在这个特殊情况下使用这种方法我得到了这个结果:

[

我也尝试使用 tooltipModelxy 值,但是,它并没有增加如何将工具提示放在中间的感觉。如果您尝试添加自定义偏移量以将其放在中间,它仅适用于这种情况,但是当您添加更多数据时它不起作用。我最多可以有 2 个数据集,但是,用户最多可以添加 10 个数据值,这意味着 10 组条形图。

问题是:有一种方法可以使用 Chart.js 提供的值将工具提示放在一组条形图(或单个条形图,以防用户只有一个数据集)的中间工具提示?或者在其他情况下,您是否知道任何使此工具提示居中的自定义方法?

谢谢!!

您没有指定 'middle' 是否表示在 x- and/or y 轴上。但是既然你写道:

...on the middle of two bars...

我假设你的意思是在 x 轴上。在这种情况下,您需要将 options.tooltips.mode 属性 设置为 index。下面是一个工作示例。

let myChart = new Chart(document.getElementById('myChart'), {
  type: 'bar',
  data: {
    labels: ['x', 'y', 'z'],
    datasets: [{
      label: '1993',
      data: [50, 30, 65],
      backgroundColor: '#503291'
    }, {
      label: '1994',
      data: [60, 15, 65],
      backgroundColor: '#1bbecd'
    }]
  },
  options: {
    tooltips: {
      mode: 'index'
    },
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }],
      xAxes: [{
        barPercentage: 1
      }]
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<canvas id="myChart"></canvas>

对于以后的问题,请提供 MCVE,这样可以更快更轻松地为您提供帮助。