自定义Echarts折线图中悬浮框的位置

本文介绍了如何在Echarts3折线图中根据鼠标悬停位置调整悬浮框的显示位置。通过设置tooltip.position并利用回调函数判断鼠标坐标,实现当鼠标在图表左侧时悬浮框在右侧,右侧时在左侧的效果。

在Echarts3的折线图的使用过程中,想使初始化出来的图表更人性化,就比如说有这么个需求,在Echarts折线图中,鼠标悬浮在左侧某一个点时,悬浮框悬停在点的右侧;鼠标悬停在右侧某一个点时,悬浮框悬停在点的左侧。

下面是具体实现思路:

首先明确一点,我们需要借助tooltip.position属性。理想的思路是我们在回调函数中获取鼠标每次悬停的坐标,然后再判断这个坐标是否处于此容器(也就是这个Echarts折线图)的左侧或者右侧;判断命中后我们再改变tooltip的位置,并返回给函数。

OK。我们先放Echarts官方API中对tooltip属性的说明看看:

ooltip.position
类型
Array, Function
默认值
null
位置指定,传入{Array},如[x, y], 固定位置[x, y];传入{Function},如function([x, y]) {return [newX,newY]},默认显示坐标为输入参数,用户指定的新坐标为输出返回。

现在提供关键代码部分:

tooltip : {
        textStyle:{
            align:'left'
        },
        trigger: 'item',
        //自定义echarts tooltip的显示位置,当鼠标移动到图表的左部时tip显示在右边,当鼠标移动到图表的右部时tip显示在左边
        position:function(position){
            //获取容器的宽度
            var chartsWidth = $("#threadtrend").width();
            //判断悬停点落在容器的哪测
            if(position[0] < (chartsWidth/2)){
                 position[0] = position[0];
            }else{
              position[0] = position[0] - 130;
            }
            return [position[0], position[1]];
        },
       formatter:'日期:{b0}'+'<br>'+'名称:{a0}'+'<br>'+'病毒个数:{c0}个'
    }

效果图:
左侧时:
这里写图片描述

右侧时:
这里写图片描述

上面的代码已经很详细了,我再稍微解释下参数的含义。首先position这个参数代表的是鼠标移动时的坐标点。position[0]代表此坐标点的X坐标,position[1]代表Y坐标。
最后返回的参数也必须类似position一样,是一个包含X坐标和Y坐标的数组。

Echarts 中,折线图悬浮提示(即 tooltip)的样式可以通过 `tooltip` 配置项进行设计。下面结合给定示例详细说明相关设计方法: ### 1. 基础配置 在 `option` 对象里,`tooltip` 配置项用于控制悬浮提示的基本行为和样式。示例中的基础配置如下: ```javascript option = { // ...其他配置... tooltip: { trigger: 'axis' }, // ...其他配置... }; ``` 这里 `trigger: 'axis'` 表示当鼠标悬浮在坐标轴上时触发悬浮提示,会同时显示该坐标轴对应所有系列的数据信息。 ### 2. 自定义悬浮提示内容格式 可以通过 `formatter` 函数自定义悬浮提示框内显示的内容。例如,若要显示更详细的信息,可做如下修改: ```javascript option = { // ...其他配置... tooltip: { trigger: 'axis', formatter: function (params) { let result = params[0].axisValue + '<br/>'; for (let i = 0; i < params.length; i++) { result += params[i].seriesName + ': ' + params[i].value + '<br/>'; } return result; } }, // ...其他配置... }; ``` 上述代码中,`formatter` 函数接收 `params` 参数,该参数包含了当前悬浮位置的相关数据信息。通过遍历 `params`,可以将每个系列的名称和对应值组合成自定义的显示内容。 ### 3. 样式设置 悬浮提示框的样式可通过 `tooltip` 配置项里的 `backgroundColor`、`borderColor`、`borderWidth`、`textStyle` 等属性进行设置。示例如下: ```javascript option = { // ...其他配置... tooltip: { trigger: 'axis', backgroundColor: 'rgba(0, 0, 0, 0.7)', // 背景颜色 borderColor: '#333', // 边框颜色 borderWidth: 1, // 边框宽度 textStyle: { color: '#fff' // 文字颜色 }, formatter: function (params) { let result = params[0].axisValue + '<br/>'; for (let i = 0; i < params.length; i++) { result += params[i].seriesName + ': ' + params[i].value + '<br/>'; } return result; } }, // ...其他配置... }; ``` 上述代码中,设置了悬浮提示框的背景颜色为半透明黑色,边框颜色为灰色,边框宽度为 1 像素,文字颜色为白色。 ### 完整示例代码 结合上述配置,完整的示例代码如下: ```javascript option = { title: { text: 'Stacked Line' }, tooltip: { trigger: 'axis', backgroundColor: 'rgba(0, 0, 0, 0.7)', borderColor: '#333', borderWidth: 1, textStyle: { color: '#fff' }, formatter: function (params) { let result = params[0].axisValue + '<br/>'; for (let i = 0; i < params.length; i++) { result += params[i].seriesName + ': ' + params[i].value + '<br/>'; } return result; } }, legend: { data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine'] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, toolbox: { feature: { saveAsImage: {} } }, xAxis: { type: 'category', boundaryGap: false, data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: { type: 'value' }, series: [ { name: 'Email', type: 'line', stack: 'Total', data: [120, 132, 101, 134, 90, 230, 210] }, { name: 'Union Ads', type: 'line', stack: 'Total', data: [220, 182, 191, 234, 290, 330, 310] }, { name: 'Video Ads', type: 'line', stack: 'Total', data: [150, 232, 201, 154, 190, 330, 410] }, { name: 'Direct', type: 'line', stack: 'Total', data: [320, 332, 301, 334, 390, 330, 320] }, { name: 'Search Engine', type: 'line', stack: 'Total', data: [820, 932, 901, 934, 1290, 1330, 1320] } ] }; ``` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值