需求

由于请求到的数据除了name和value以外,还有其它的一些数据,所以当鼠标移入时,tooltip提示框内必须显示当前name下的所有数据;echarts官网有堆叠图的示例,但是鼠标移入后,tooltip提示框会显示同一个轴内的的所有数据,这并不符合我们的实际需求。

下面是echarts官网的示例

        想要做到上述需求,就必须找到当前鼠标所在位置的数据。但是,在tooltip.formatter中找了好久都没能找到对应的数据;于是我转变思路,是不是能够通过对比鼠标的位置来找到当前name下的数据。

xisPointer: {
            type: "cross",
            label: {
              formatter:  (params)=> {
                if (params.seriesData.length === 0) {
                  this.coordinate = params.value;
                }
               },
            },
          },

        然后我去echarts的 官方文档     中找到了tooltip的一个配置项xisPointer,鼠标移入时打印他的params发现,当seriesData为空时,它的value值为当前鼠标在图内的坐标,而且最重要的是,axisPointer会先formatter一步触发,那就意味着,我们能够拿到coordinate的值对formatter进行处理。

       在formatter中使用coordinate的时候我发现,formatter中的params列表长度与coordinate的值有一定关系,即越靠近X轴对应的series,在数组中的位置越靠前,累加当前series.data的值与coordinate进行对比,就能拿到当前鼠标所在位置的值

 formatter: (params) => {
            let res = "",
              sum = 0;
            for (let i = 0; i < params.length; i++) {
              if (params[i].value > 0) {
                let series = params[i];
                
                sum += Number(series.data);
                if (sum >= this.coordinate) {
                 
                  console.log(Number(series.data));
                  console.log( this.coordinate);
                  res =
                    series.axisValue +
                    "<br/>" +
                    series.marker +
                    series.seriesName +
                    ":" +
                    series.data +
                    "<br/>";
                  return formatttip(
                    dataSource.ydata[series.dataIndex][series.seriesIndex],
                    res
                  );
                }
              }
            }
          },

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐