Echarts饼状图自定义tooltip提示框

1,329 阅读3分钟

ECharts 中的 Tooltip 是用于展示数据项的详细信息的组件,它会在鼠标悬停在图表上时触发,并显示与鼠标位置对应的数据项的信息。

其实现原理的如下五个方面:

  • 事件监听:ECharts 在图表初始化时会调用 initEvents监听鼠标移动、点击等事件。当鼠标移动到图表上时,会触发会触发 mousemove 事件,并调用 dispatchAction 方法。
this._zr.on('mousemove', this._onmousemove)
  • 数据定位:当鼠标移动到图表上时,ECharts 会根据鼠标的位置计算出对应的数据项。这一过程涉及到坐标系的转换和数据的映射。
var payload = {

    type: 'showTip',

    x: x,

    y: y,

    tooltipOption: option.tooltip,

    dataIndex: dataIndex,

    seriesIndex: seriesIndex,

    from: this.uid

}
  • Tooltip 显示:一旦确定了鼠标所指向的数据项,ECharts 就会根据配置中的设置,监听 showTip 命令,生成相应的 Tooltip 内容。Tooltip 可以包含标题、数值、单位等信息,也可以自定义显示内容。同时,Tooltip 的样式、位置等也可以进行配置。
chart.on('showTip', function (param) {

    var seriesIndex = param.seriesIndex;

    var dataIndex = param.dataIndex;

    var tooltipOption = param.tooltipOption;

    // 根据 seriesIndex 和 dataIndex 获取对应的数据项

    var data = chart.getModel().getSeriesByIndex(seriesIndex).getData();

    var itemModel = data.getItemModel(dataIndex);

    // 根据配置生成 Tooltip 的内容

    var content = [

        '<div class="tooltip-title">' + itemModel.get('name') + '</div>',

        '<div class="tooltip-content">'

        + itemModel.get('value') + tooltipOption.unit

        + '</div>'

    ].join('');

    // 显示 Tooltip

    tooltip.showTooltip({

        content: content,

        position: [param.x, param.y]

    });

});
  • Tooltip 定位:根据鼠标的位置和 Tooltip 的样式配置,ECharts 会计算出 Tooltip 的显示位置,并将其显示在对应的位置上。
Tooltip.prototype.showTooltip = function (params) {

    var content = params.content;

    var position = params.position;

    // 计算 Tooltip 的大小和位置

    var size = this._getSize(content);

    var x = position[0] - size.width / 2;

    var y = position[1] - size.height - 10;

    // 设置 Tooltip 的内容和位置

    this._$tooltip.html(content).css({

            left: x,

            top: y

    });

    // 显示 Tooltip

    this._$tooltip.show();

};
  • Tooltip 的交互:除了显示数据项的信息,Tooltip 还支持交互操作。例如,可以通过配置开启 Tooltip 的坐标轴触发,当鼠标悬停在坐标轴上时也会触发 Tooltip,并显示相应的信息。

总的来说,ECharts 中的 Tooltip 实现原理主要包括事件监听、数据定位、Tooltip 内容生成和定位等步骤。通过这些步骤,ECharts 能够在鼠标悬停在图表上时,准确地显示对应的数据项的详细信息。

那么,在Echarts中会遇到需要自定义tooltip提示框的场景,如何进行提示框内容及样式的自定义呢?

以下为样例:

image.png

大体实现逻辑分为三个方面:

1.  更改tooltip背景样式(透明度、边框、背景色、padding)

2.  自定义tooltip文字显示内容

3.  根据不同饼图模块显示不同提示框颜色

实现方式:

1.  通过设置tooltip原生属性

a.  backgroundColor背景色为transparent

b.  borderColor为transparent

c.  padding为0

d.  borderWith为0

2.  自定义tooltip文字显示内容

a.  formatter定义函数定义文字显示内容,返回值应为一个字符串类型DOM结构即可

formatter: function(params) {

    // 显示内容设置

    return String

}

3.  根据不同饼图模块显示不同提示框颜色

a.  需要配合饼图的颜色进行提取,饼图series属性中可以设置itemStyle属性的color为颜色数组

itemStyle: {

    color: function (colors) {

    const colorArr = [        'xxx',        'yyy',        'zzz'    ]

    return colorArr[colors.dataIndex]

    }

}

b.  需要配合饼图的颜色修改自定义tooltip的formatter函数,进行颜色设置。其中通过params接收饼图的颜色,根据其颜色做处理即可

formatter: function(params) {

    // 显示内容设置

    return `

            <div style='background-color: ${func(params.color)}'>

                // 内容

            </div>

        `

}

如有其他实现方式,欢迎大家补充!