提示配置

提示框配置在options.tooltips中设置。图表提示框的全局选项在Chart.defaults.global.tooltips中定义。

名称类型默认值描述
enabledBooleantrue是否开启提示
customFunctionnull参阅自定义工具提示部分 See
modeString'nearest'设置提示框中显示的元素 更多….
intersectBooleantrue如果为 true,则提示框模式仅在鼠标位置与元素相交时才适用。如果为 false,该模式将随时应用。
positionString'average'提示的位置. 更多…
callbacksObject参考 回调部分
itemSortFunction提示项目排序 more…
filterFunction过滤提示项目. more…
backgroundColorColor'rgba(0,0,0,0.8)'背景色
titleFontFamilyString"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"标题字体
titleFontSizeNumber12标题字号
titleFontStyleString'bold'标题样式
titleFontColorColor'#fff'标题颜色
titleSpacingNumber2添加到每个标题顶部和底部的内间距
titleMarginBottomNumber6标题部分的下外间距
bodyFontFamilyString"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"内容的字体
bodyFontSizeNumber12内容字体大小
bodyFontStyleString'normal'内容字体样式
bodyFontColorColor'#fff'内容字体颜色
bodySpacingNumber2内容的上下内间距
footerFontFamilyString"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"页脚字体(指提示框的底部,下同)
footerFontSizeNumber12页脚字体大小
footerFontStyleString'bold'页脚字体样式
footerFontColorColor'#fff'页脚字体颜色
footerSpacingNumber2页脚上下内间距
footerMarginTopNumber6页脚的外边距
xPaddingNumber6提示框的左右内边距
yPaddingNumber6提示框的上下内边距
caretPaddingNumber2提示箭头
caretSizeNumber5提示箭头大小,单位:px
cornerRadiusNumber6提示框圆角
multiKeyBackgroundColor'#fff'当多个项目位于提示框中时,颜色会在彩色框后面绘制
displayColorsBooleantrue如果为 true,则工具提示中会显示颜色框
borderColorColor'rgba(0,0,0,0)'边框颜色
borderWidthNumber0边框大小

位置模式

提供的模式有:

  • 'average'

a0a195f353467a71cbf73aef086249902c53c5a4

提示框标签的配置使用callbacks关键字嵌套在提示框下面。提示框具有以下提供文本的回调。对于所有函数,“this”是从Chart.Tooltip构造函数创建的提示对象。

使用相同的参数调用所有函数:一个提示项和传递给图表的数据对象。所有函数必须返回字符串或字符串数 ​​ 组。字符串的数组被视为多行文本。

名称参数描述
beforeTitleArray[tooltipItem], data返回标题前要渲染的文字
titleArray[tooltipItem], data返回要作为提示框标题渲染的文本
afterTitleArray[tooltipItem], data返回标题后渲染的文本
beforeBodyArray[tooltipItem], data返回在内容部分之前渲染的文本
beforeLabeltooltipItem, data返回在单个 label 之前渲染的文本。提示框中的每个项目调用
labeltooltipItem, data返回在提示框中为单个项目渲染的文本
labelColortooltipItem, chart返回要渲染提示项目的颜色 更多…
labelTextColortooltipItem, chart返回工具提示项目标签文本的颜色
afterLabeltooltipItem, data返回在单个 label 之后渲染的文本
afterBodyArray[tooltipItem], data返回在 body 部分后渲染的文本
beforeFooterArray[tooltipItem], data返回在页脚部分之前渲染的文本
footerArray[tooltipItem], data返回纯文本的方式渲染页脚
afterFooterArray[tooltipItem], data在页脚部分后面渲染的文字

标签回调函数

标签回调可以更改显示给定数据点的文本。 一个常见的例子是整理数据值; 以下示例将数据四舍五入到小数点后两位。

  1. var chart = new Chart(ctx, {
  2. type: 'line',
  3. data: data,
  4. options: {
  5. tooltips: {
  6. callbacks: {
  7. label: function(tooltipItem, data) {
  8. var label = data.datasets[tooltipItem.datasetIndex].label || '';
  9. if (label) {
  10. label += ': ';
  11. }
  12. label += Math.round(tooltipItem.yLabel * 100) / 100;
  13. return label;
  14. }
  15. }
  16. }
  17. }
  18. });

标签颜色回调

例如要为工具提示中的每个项目返回一个红色框,可以执行以下操作:

  1. var chart = new Chart(ctx, {
  2. type: 'line',
  3. data: data,
  4. options: {
  5. tooltips: {
  6. callbacks: {
  7. labelColor: function(tooltipItem, chart) {
  8. return {
  9. borderColor: 'rgb(255, 0, 0)',
  10. backgroundColor: 'rgb(255, 0, 0)'
  11. }
  12. },
  13. labelTextColor:function(tooltipItem, chart){
  14. return '#543453';
  15. }
  16. }
  17. }
  18. }
  19. });

提示项接口

传递给工具提示回调的工具提示项实现了以下接口

  1. {
  2. // X 值
  3. xLabel: String,
  4. // Y 值
  5. yLabel: String,
  6. // 数据集的索引
  7. datasetIndex: Number,
  8. // 数据集中此数据的索引
  9. index: Number,
  10. // 匹配点的X位置
  11. x: Number,
  12. // 匹配点的Y位置
  13. y: Number,
  14. }

外部工具提示(自定义)

自定义工具提示允许您使用钩子介入工具提示渲染过程,以便以自定义方式渲染工具提示。通常这是用来创建一个 HTML 提示,而不是一个 oncanvas。您可以在全局或图表配置中启用自定义工具提示,如下所示:

  1. var myPieChart = new Chart(ctx, {
  2. type: 'pie',
  3. data: data,
  4. options: {
  5. tooltips: {
  6. // Disable the on-canvas tooltip
  7. enabled: false,
  8. custom: function(tooltipModel) {
  9. // Tooltip Element
  10. var tooltipEl = document.getElementById('chartjs-tooltip');
  11. // Create element on first render
  12. if (!tooltipEl) {
  13. tooltipEl = document.createElement('div');
  14. tooltipEl.id = 'chartjs-tooltip';
  15. tooltipEl.innerHTML = "<table></table>";
  16. document.body.appendChild(tooltipEl);
  17. }
  18. // Hide if no tooltip
  19. if (tooltipModel.opacity === 0) {
  20. tooltipEl.style.opacity = 0;
  21. return;
  22. }
  23. // Set caret Position
  24. tooltipEl.classList.remove('above', 'below', 'no-transform');
  25. if (tooltipModel.yAlign) {
  26. tooltipEl.classList.add(tooltipModel.yAlign);
  27. } else {
  28. tooltipEl.classList.add('no-transform');
  29. }
  30. function getBody(bodyItem) {
  31. return bodyItem.lines;
  32. }
  33. // Set Text
  34. if (tooltipModel.body) {
  35. var titleLines = tooltipModel.title || [];
  36. var bodyLines = tooltipModel.body.map(getBody);
  37. var innerHtml = '<thead>';
  38. titleLines.forEach(function(title) {
  39. innerHtml += '<tr><th>' + title + '</th></tr>';
  40. });
  41. innerHtml += '</thead><tbody>';
  42. bodyLines.forEach(function(body, i) {
  43. var colors = tooltipModel.labelColors[i];
  44. var style = 'background:' + colors.backgroundColor;
  45. style += '; border-color:' + colors.borderColor;
  46. style += '; border-width: 2px';
  47. var span = '<span style="' + style + '"></span>';
  48. innerHtml += '<tr><td>' + span + body + '</td></tr>';
  49. });
  50. innerHtml += '</tbody>';
  51. var tableRoot = tooltipEl.querySelector('table');
  52. tableRoot.innerHTML = innerHtml;
  53. }
  54. // `this` will be the overall tooltip
  55. var position = this._chart.canvas.getBoundingClientRect();
  56. // Display, position, and set styles for font
  57. tooltipEl.style.opacity = 1;
  58. tooltipEl.style.position = 'absolute';
  59. tooltipEl.style.left = position.left + tooltipModel.caretX + 'px';
  60. tooltipEl.style.top = position.top + tooltipModel.caretY + 'px';
  61. tooltipEl.style.fontFamily = tooltipModel._bodyFontFamily;
  62. tooltipEl.style.fontSize = tooltipModel.bodyFontSize + 'px';
  63. tooltipEl.style.fontStyle = tooltipModel._bodyFontStyle;
  64. tooltipEl.style.padding = tooltipModel.yPadding + 'px ' + tooltipModel.xPadding + 'px';
  65. }
  66. }
  67. }
  68. });

See samples for examples on how to get started with custom tooltips.

提示框实体包含可用于呈现工具提示的参数。

  1. {
  2. // 在工具提示中呈现的项目。请参阅工具提示项目界面部分
  3. dataPoints: TooltipItem[],
  4. // 定位
  5. xPadding: Number,
  6. yPadding: Number,
  7. xAlign: String,
  8. yAlign: String,
  9. // X and Y properties are the top left of the tooltip
  10. x: Number,
  11. y: Number,
  12. width: Number,
  13. height: Number,
  14. // Where the tooltip points to
  15. caretX: Number,
  16. caretY: Number,
  17. // Body
  18. // The body lines that need to be rendered
  19. // Each object contains 3 parameters
  20. // before: String[] // lines of text before the line with the color square
  21. // lines: String[], // lines of text to render as the main item with color square
  22. // after: String[], // lines of text to render after the main lines
  23. body: Object[],
  24. // lines of text that appear after the title but before the body
  25. beforeBody: String[],
  26. // line of text that appear after the body and before the footer
  27. afterBody: String[],
  28. bodyFontColor: Color,
  29. _bodyFontFamily: String,
  30. _bodyFontStyle: String,
  31. _bodyAlign: String,
  32. bodyFontSize: Number,
  33. bodySpacing: Number,
  34. // Title
  35. // lines of text that form the title
  36. title: String[],
  37. titleFontColor: Color,
  38. _titleFontFamily: String,
  39. _titleFontStyle: String,
  40. titleFontSize: Number,
  41. _titleAlign: String,
  42. titleSpacing: Number,
  43. titleMarginBottom: Number,
  44. // Footer
  45. // lines of text that form the footer
  46. footer: String[],
  47. footerFontColor: Color,
  48. _footerFontFamily: String,
  49. _footerFontStyle: String,
  50. footerFontSize: Number,
  51. _footerAlign: String,
  52. footerSpacing: Number,
  53. footerMarginTop: Number,
  54. // Appearance
  55. caretSize: Number,
  56. cornerRadius: Number,
  57. backgroundColor: Color,
  58. // colors to render for each item in body[]. This is the color of the squares in the tooltip
  59. labelColors: Color[],
  60. // 0 opacity is a hidden tooltip
  61. opacity: Number,
  62. legendColorBackground: Color,
  63. displayColors: Boolean,
  64. }