1.4.5 提示(tooltip
优质
小牛编辑
125浏览
2023-12-01
提示配置
提示框配置在options.tooltips
中设置。图表提示框的全局选项在Chart.defaults.global.tooltips
中定义。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
enabled | Boolean | true | 是否开启提示 |
custom | Function | null | 参阅自定义工具提示部分 See |
mode | String | 'nearest' | 设置提示框中显示的元素 更多.... |
intersect | Boolean | true | 如果为 true,则提示框模式仅在鼠标位置与元素相交时才适用。如果为 false,该模式将随时应用。 |
position | String | 'average' | 提示的位置. 更多... |
callbacks | Object | 参考 回调部分 | |
itemSort | Function | 提示项目排序 more... | |
filter | Function | 过滤提示项目. more... | |
backgroundColor | Color | 'rgba(0,0,0,0.8)' | 背景色 |
titleFontFamily | String | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" | 标题字体 |
titleFontSize | Number | 12 | 标题字号 |
titleFontStyle | String | 'bold' | 标题样式 |
titleFontColor | Color | '#fff' | 标题颜色 |
titleSpacing | Number | 2 | 添加到每个标题顶部和底部的内间距 |
titleMarginBottom | Number | 6 | 标题部分的下外间距 |
bodyFontFamily | String | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" | 内容的字体 |
bodyFontSize | Number | 12 | 内容字体大小 |
bodyFontStyle | String | 'normal' | 内容字体样式 |
bodyFontColor | Color | '#fff' | 内容字体颜色 |
bodySpacing | Number | 2 | 内容的上下内间距 |
footerFontFamily | String | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" | 页脚字体(指提示框的底部,下同) |
footerFontSize | Number | 12 | 页脚字体大小 |
footerFontStyle | String | 'bold' | 页脚字体样式 |
footerFontColor | Color | '#fff' | 页脚字体颜色 |
footerSpacing | Number | 2 | 页脚上下内间距 |
footerMarginTop | Number | 6 | 页脚的外边距 |
xPadding | Number | 6 | 提示框的左右内边距 |
yPadding | Number | 6 | 提示框的上下内边距 |
caretPadding | Number | 2 | 提示箭头 |
caretSize | Number | 5 | 提示箭头大小,单位:px |
cornerRadius | Number | 6 | 提示框圆角 |
multiKeyBackground | Color | '#fff' | 当多个项目位于提示框中时,颜色会在彩色框后面绘制 |
displayColors | Boolean | true | 如果为 true,则工具提示中会显示颜色框 |
borderColor | Color | 'rgba(0,0,0,0)' | 边框颜色 |
borderWidth | Number | 0 | 边框大小 |
位置模式
提供的模式有:
- 'average'
a0a195f353467a71cbf73aef086249902c53c5a4
提示框标签的配置使用callbacks
关键字嵌套在提示框下面。提示框具有以下提供文本的回调。对于所有函数,“this”是从Chart.Tooltip
构造函数创建的提示对象。
使用相同的参数调用所有函数:一个提示项和传递给图表的数据对象。所有函数必须返回字符串或字符串数 组。字符串的数组被视为多行文本。
名称 | 参数 | 描述 |
---|---|---|
beforeTitle | Array[tooltipItem], data | 返回标题前要渲染的文字 |
title | Array[tooltipItem], data | 返回要作为提示框标题渲染的文本 |
afterTitle | Array[tooltipItem], data | 返回标题后渲染的文本 |
beforeBody | Array[tooltipItem], data | 返回在内容部分之前渲染的文本 |
beforeLabel | tooltipItem, data | 返回在单个 label 之前渲染的文本。提示框中的每个项目调用 |
label | tooltipItem, data | 返回在提示框中为单个项目渲染的文本 |
labelColor | tooltipItem, chart | 返回要渲染提示项目的颜色 更多... |
labelTextColor | tooltipItem, chart | 返回工具提示项目标签文本的颜色 |
afterLabel | tooltipItem, data | 返回在单个 label 之后渲染的文本 |
afterBody | Array[tooltipItem], data | 返回在 body 部分后渲染的文本 |
beforeFooter | Array[tooltipItem], data | 返回在页脚部分之前渲染的文本 |
footer | Array[tooltipItem], data | 返回纯文本的方式渲染页脚 |
afterFooter | Array[tooltipItem], data | 在页脚部分后面渲染的文字 |
标签回调函数
标签回调可以更改显示给定数据点的文本。 一个常见的例子是整理数据值; 以下示例将数据四舍五入到小数点后两位。
var chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var label = data.datasets[tooltipItem.datasetIndex].label || '';
if (label) {
label += ': ';
}
label += Math.round(tooltipItem.yLabel * 100) / 100;
return label;
}
}
}
}
});
标签颜色回调
例如要为工具提示中的每个项目返回一个红色框,可以执行以下操作:
var chart = new Chart(ctx, {
type: 'line',
data: data,
options: {
tooltips: {
callbacks: {
labelColor: function(tooltipItem, chart) {
return {
borderColor: 'rgb(255, 0, 0)',
backgroundColor: 'rgb(255, 0, 0)'
}
},
labelTextColor:function(tooltipItem, chart){
return '#543453';
}
}
}
}
});
提示项接口
传递给工具提示回调的工具提示项实现了以下接口
{
// X 值
xLabel: String,
// Y 值
yLabel: String,
// 数据集的索引
datasetIndex: Number,
// 数据集中此数据的索引
index: Number,
// 匹配点的X位置
x: Number,
// 匹配点的Y位置
y: Number,
}
外部工具提示(自定义)
自定义工具提示允许您使用钩子介入工具提示渲染过程,以便以自定义方式渲染工具提示。通常这是用来创建一个 HTML 提示,而不是一个 oncanvas。您可以在全局或图表配置中启用自定义工具提示,如下所示:
var myPieChart = new Chart(ctx, {
type: 'pie',
data: data,
options: {
tooltips: {
// Disable the on-canvas tooltip
enabled: false,
custom: function(tooltipModel) {
// Tooltip Element
var tooltipEl = document.getElementById('chartjs-tooltip');
// Create element on first render
if (!tooltipEl) {
tooltipEl = document.createElement('div');
tooltipEl.id = 'chartjs-tooltip';
tooltipEl.innerHTML = "<table></table>";
document.body.appendChild(tooltipEl);
}
// Hide if no tooltip
if (tooltipModel.opacity === 0) {
tooltipEl.style.opacity = 0;
return;
}
// Set caret Position
tooltipEl.classList.remove('above', 'below', 'no-transform');
if (tooltipModel.yAlign) {
tooltipEl.classList.add(tooltipModel.yAlign);
} else {
tooltipEl.classList.add('no-transform');
}
function getBody(bodyItem) {
return bodyItem.lines;
}
// Set Text
if (tooltipModel.body) {
var titleLines = tooltipModel.title || [];
var bodyLines = tooltipModel.body.map(getBody);
var innerHtml = '<thead>';
titleLines.forEach(function(title) {
innerHtml += '<tr><th>' + title + '</th></tr>';
});
innerHtml += '</thead><tbody>';
bodyLines.forEach(function(body, i) {
var colors = tooltipModel.labelColors[i];
var style = 'background:' + colors.backgroundColor;
style += '; border-color:' + colors.borderColor;
style += '; border-width: 2px';
var span = '<span style="' + style + '"></span>';
innerHtml += '<tr><td>' + span + body + '</td></tr>';
});
innerHtml += '</tbody>';
var tableRoot = tooltipEl.querySelector('table');
tableRoot.innerHTML = innerHtml;
}
// `this` will be the overall tooltip
var position = this._chart.canvas.getBoundingClientRect();
// Display, position, and set styles for font
tooltipEl.style.opacity = 1;
tooltipEl.style.position = 'absolute';
tooltipEl.style.left = position.left + tooltipModel.caretX + 'px';
tooltipEl.style.top = position.top + tooltipModel.caretY + 'px';
tooltipEl.style.fontFamily = tooltipModel._bodyFontFamily;
tooltipEl.style.fontSize = tooltipModel.bodyFontSize + 'px';
tooltipEl.style.fontStyle = tooltipModel._bodyFontStyle;
tooltipEl.style.padding = tooltipModel.yPadding + 'px ' + tooltipModel.xPadding + 'px';
}
}
}
});
See samples for examples on how to get started with custom tooltips.
提示框实体包含可用于呈现工具提示的参数。
{
// 在工具提示中呈现的项目。请参阅工具提示项目界面部分
dataPoints: TooltipItem[],
// 定位
xPadding: Number,
yPadding: Number,
xAlign: String,
yAlign: String,
// X and Y properties are the top left of the tooltip
x: Number,
y: Number,
width: Number,
height: Number,
// Where the tooltip points to
caretX: Number,
caretY: Number,
// Body
// The body lines that need to be rendered
// Each object contains 3 parameters
// before: String[] // lines of text before the line with the color square
// lines: String[], // lines of text to render as the main item with color square
// after: String[], // lines of text to render after the main lines
body: Object[],
// lines of text that appear after the title but before the body
beforeBody: String[],
// line of text that appear after the body and before the footer
afterBody: String[],
bodyFontColor: Color,
_bodyFontFamily: String,
_bodyFontStyle: String,
_bodyAlign: String,
bodyFontSize: Number,
bodySpacing: Number,
// Title
// lines of text that form the title
title: String[],
titleFontColor: Color,
_titleFontFamily: String,
_titleFontStyle: String,
titleFontSize: Number,
_titleAlign: String,
titleSpacing: Number,
titleMarginBottom: Number,
// Footer
// lines of text that form the footer
footer: String[],
footerFontColor: Color,
_footerFontFamily: String,
_footerFontStyle: String,
footerFontSize: Number,
_footerAlign: String,
footerSpacing: Number,
footerMarginTop: Number,
// Appearance
caretSize: Number,
cornerRadius: Number,
backgroundColor: Color,
// colors to render for each item in body[]. This is the color of the squares in the tooltip
labelColors: Color[],
// 0 opacity is a hidden tooltip
opacity: Number,
legendColorBackground: Color,
displayColors: Boolean,
}