当前位置: 首页 > 文档资料 > Chart.js 开发文档 >

1.4.5 提示(tooltip

优质
小牛编辑
125浏览
2023-12-01

提示配置

提示框配置在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在页脚部分后面渲染的文字

标签回调函数

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

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,
}