echarts的自定义tooltip居中展示

文章讲述了如何在Echarts中实现折线图的tooltip动态定位,尤其是在不同手机分辨率下保持在x轴选择节点正上方的显示。作者通过实际测试和调整,提供了一个基于鼠标点击位置的自定义position函数,确保tooltip始终位于正确的位置。
摘要由CSDN通过智能技术生成

使用echarts的时候,tooltip位置设置

echarts画折线图tooltip 动态设置位置

你好! 我们在使用echarts的时候经常会要求点击areaStyle的时候展示tooltip,但是我们查看echarts官方文档,发现tooltip只可以设置如下位置:
inside

鼠标所在图形的内部中心位置,只在 trigger 为’item’的时候有效。

top

鼠标所在图形上侧,只在 trigger 为’item’的时候有效。

left

鼠标所在图形左侧,只在 trigger 为’item’的时候有效。

right

鼠标所在图形右侧,只在 trigger 为’item’的时候有效。

bottom

鼠标所在图形底侧,只在 trigger 为’item’的时候有效。

或者
Array

通过数组表示提示框浮层的位置,支持数字设置绝对位置,百分比设置相对位置。

Function

回调函数,格式如下:

(point: Array, params: Object|Array., dom: HTMLDomElement, rect: Object, size: Object) => Array
参数:
point: 鼠标位置,如 [20, 40]。
params: 同 formatter 的参数相同。
dom: tooltip 的 dom 对象。
rect: 只有鼠标在图形上时有效,是一个用x, y, width, height四个属性表达的图形包围盒。
size: 包括 dom 的尺寸和 echarts 容器的当前尺寸,例如:{contentSize: [width, height], viewSize: [width, height]}。

这些参数可以设置展示在坐标轴的上下左右或者鼠标点击位置,或者相对点击的位置。
在这里插入图片描述

但是有些时候需求就需要点击的不管在什么位置,tooltip必须在x轴展示的选择节点选中线正上,哪我们怎么设置呢?

##一些思考

我对tooltip的position参数做了配置,position 参数会返回这些:

position: (point: any, params: any, dom: HTMLElement, rect: Object, size: any)
1:point: 鼠标位置,如 [20, 40]。
2:params: 同 formatter 的参数相同。
3:dom: tooltip 的 dom 对象。
4:rect: 只有鼠标在图形上时有效,是一个用x, y, width, height四个属性表达的图形包围盒。
5:size: 包括 dom 的尺寸和 echarts 容器的当前尺寸,例如:{contentSize: [width, height], viewSize: [width, height]}。

我对echarts折线图做了各个版本手机分辨率测试,从宽度280对Galaxy Fold到414的iphone xr 都做了测试,基本没有什么误差

这是在iphone xr上表现
在这里插入图片描述
这是在Galaxy Fold上表现:
在这里插入图片描述

我看了下其他各种分辨率都能适配到99%,基本无误差,主要在与设置弹出层的x的位置:
任何纯理论都不与实地试验,于是我找了4中比较有代表性的设备,
分辨率(宽)分别是390,414,375,360
我们可以把平米看成100%,6个月就看x轴在屏幕百分比,我试过了4个分辨率手机,得出了结论:
6个月均分的第一个月永远在屏幕8%左右,最后一个月在85%左右,我们均分下就是每个区域在屏幕位置如下:
15.8%-31.4%-47%-62.6%-78.2-94.8%
15.8%以下是第一个月-31.4%以下第二个月-47%以此类推-62.6%-78.2-94.8%
然后我们需要在点击的x轴的左边一半和右边一半都需要定位在当前月份,比如说我们要展示在10月正上方,点击在9.5-10.5区间都需要展示在10月正上方,所以我们可以在position参数上做文章,根据position的第一个参数point鼠标点击的位置,如果在屏幕位置<15.8%就设置8%位置展示tooltip,但是在实际使用过程中发现tooltip总是会:

向右偏移
这是因为tooltip自己有宽度,所以我们需要在最后百分比基础上减掉1/2的宽度就是: window.innerWidth * 0.08-size.contentSize[0]/2

 position: (point: any, params: any, dom: HTMLElement, rect: Object, size: any) => {
            // 固定在顶部
            var x = 0; // x坐标位置
            var y = 0; // y坐标位置
            if(point[0]< window.innerWidth * 0.158){
              x = window.innerWidth * 0.08
            }else if(point[0]< window.innerWidth * (0.158+0.156)){
              x = window.innerWidth * (0.08+0.156)
            }else if(point[0]< window.innerWidth * (0.158+0.156 * 2)){
              x = window.innerWidth * (0.08+0.156*2)
            }else if(point[0]< window.innerWidth * (0.158+0.156 * 3)){
              x = window.innerWidth * (0.08+0.156*3)
            }else if(point[0]< window.innerWidth * (0.158+0.156 * 4)){
              x = window.innerWidth * (0.08+0.156*4)
            }else if(point[0]< window.innerWidth * (0.158+0.156 * 5)){
              x = window.innerWidth * (0.08+0.156*5)
            }
            return [x-size.contentSize[0]/2, point[1] - 70];
          },

完美解决产品需求每次都指到选中的x轴正中心。
所以大家有什么问题可以留言沟通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值