更改Chart.js工具提示的箭头位置

12
我使用Chart.js 2.5创建了一个甜甜圈图表。我遇到的问题是关于工具提示。当我将鼠标悬停在图表上时,会显示一个带有尖角的工具提示,该尖角始终停留在左侧或右侧,如下所示:

side tooltip

我希望更改插入符的位置,使其始终显示在底部。这是否可能?

这是我的图表代码:

var myChart = new Chart(ctx, {
    type: 'doughnut',
    data: {
        labels: ['Jan', 'Feb', 'Mar'],
        datasets: [{
            label: 'dataset',
            data: [30, 50, 20],
            backgroundColor: [
            'rgb(153, 102, 255)',
            'rgb(255, 205, 86)',
            'rgb(54, 162, 235)'
            ],
        }],
    }
})
4个回答

25
您可以在图表选项中将 yAlign 属性设置为 bottom,以使提示工具始终显示在底部位置的小三角形。
options: {
    tooltips: {
        yAlign: 'bottom'
    }
}

演示

var ctx = document.getElementById("chart").getContext("2d");
var myChart = new Chart(ctx, {
    type: 'doughnut',
    data: {
        labels: ['Jan', 'Feb', 'Mar'],
        datasets: [{
            label: 'dataset',
            data: [30, 50, 20],
            backgroundColor: ['rgb(153, 102, 255)', 'rgb(255, 205, 86)', 'rgb(54, 162, 235)']
        }]
    },
    options: {
        responsive: false,
        tooltips: {
            yAlign: 'bottom'
        }
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<canvas id="chart" height="180"></canvas>


3
提示选项似乎不再具有'yAlign'属性,或者我错了吗? - DongBin Kim
@DongBinKim 仍然可以使用 // @ts-ignore - Polv
@DongBinKim 这是反过来的,因为它适用于插入符而不是工具提示(API选择奇怪)。 - kano

4

1
感谢您的回复。由于它是第一个,所以不得不接受其他的 :) - user8010590
@CamielJacobs 我没问题。很高兴能帮忙。我同时写了这个答案,发出后才看到其他答案。一旦你获得足够的声望,你可以投票支持所有有用的答案。 - Tot Zam

2

有很多方法可以自定义工具提示。这里有一个通过CodePen的好例子。

https://codepen.io/mab213/pen/PZOXdE

customTooltips: function(tooltip) {
  // Tooltip Element
  var tooltipEl = $('#chartjs-tooltip');
  // Hide if no tooltip
  if (!tooltip) {
    tooltipEl.css({
      opacity: 1
    });
    return;
  }
  // Set caret Position
  tooltipEl.removeClass('above below');
  tooltipEl.addClass(tooltip.yAlign);
  tooltipEl.addClass(tooltip.xAlign);
  // Set Text
  tooltipEl.html(tooltip.text);
  // Find Y Location on page
  var top;
  if (tooltip.yAlign == 'above') {
    top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
  } else {
    top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
  }
  // Display, position, and set styles for font
  tooltipEl.css({
    opacity: 1,
    left: tooltip.chart.canvas.offsetLeft + tooltip.x + 'px',
    top: tooltip.chart.canvas.offsetTop + top + 'px',
    fontFamily: tooltip.fontFamily,
    fontSize: tooltip.fontSize,
    fontStyle: tooltip.fontStyle,
    xOffset: tooltip.xOffset,
  });
}


2

对于在2021年及以后仍然无法正常工作的人,提示工具对齐选项适用于插入符的位置。因此,如果您将yAlign设置为'bottom',那么意味着提示工具必须在顶部对齐(以便插入符保持在底部)。所以这很简单 - 如果您需要在底部渲染提示工具,请将插入符的yAlign: 'top'设置。

例如:

var ctx = document.getElementById("chart").getContext("2d");
var myChart = new Chart(ctx, {
    type: 'doughnut',
    data: {
        labels: ['Jan', 'Feb', 'Mar'],
        datasets: [{
            label: 'dataset',
            data: [30, 50, 20],
            backgroundColor: ['rgb(153, 102, 255)', 'rgb(255, 205, 86)', 'rgb(54, 162, 235)']
        }]
    },
    options: {
        responsive: false,
        tooltips: {
            yAlign: 'top'
        }
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<canvas id="chart" height="180"></canvas>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接