Echarts 实现 hover 状态下,坐标轴文字高亮

本文介绍如何在ECharts中实现坐标轴文字hover时的颜色高亮效果,通过注册mouseover和mouseout事件动态改变textStyle.color属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、需求说明

Echarts 图中的柱状图和坐标文字皆可点击触发相对应的事件,希望用户鼠标 hover 状态有颜色高亮的效果。如图:

二、实现思路

Echarts 的柱状图 hover 状态已默认有高亮状态,不作叙述;难点在于坐标轴文字如何实现 hover 高亮。经过查找 Echarts 关于轴线的 hover 状态下的颜色配置,并没有。。。data.textStyle.color 不区分任何状态!!!

那就通过监听 Echarts 的 mouseovermouseout 事件来动态更改 data.textStyle.color 的配置?mouseover 事件触发时,将所对应的类目轴的 textStyle.color 设置为你想要的高亮颜色;mouseout 事件触发时,将所对应的类目轴的 textStyle.color 恢复为默认颜色。

三、Demo

效果及在线 Demo

代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Echarts Demo</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.0.0-rc.1/echarts.min.js"></script>
  <style>
    html,
    body {
      display: flex;
      justify-content: center;
      background-color:#202532;
    }

    #app {
      width: 700px;
      height: 200px;
    }
  </style>
</head>
<body>
  <div id="app"></div>

  <script>
    const yAxisData = ['HUAWEI', 'Apple', 'OPPO', 'ViVo']
    const myChart = echarts.init(document.getElementById('app'))

    const options = {
      tooltip: {},
      grid: {
        top: 20,
        bottom: 0,
      },
      xAxis: {
        show: false
      },
      yAxis: {
        type: 'category',
        axisLine: {
          show: false
        },
        axisTick: {
          show: false
        },
        triggerEvent: true,
        data: ['HUAWEI', 'Apple', 'OPPO', 'ViVo']
      },
      series: {
        type: 'bar',
        data: [56, 24, 17, 12]
      }
    }

    myChart.setOption(options)

    // 注册 mouseover 事件,类目轴名称切换为自定义颜色
    myChart.on('mouseover', params => {
      if (params.componentType === 'yAxis') {
        const yAxisName = params.value
        const yAxisItem = {
          value: yAxisName,
          textStyle: {
            color: '#00ff7f'
          }
        }

        const index = yAxisData.findIndex(item => {
          return item === yAxisName || item.value === yAxisName
        })

        yAxisData.splice(index, 1, yAxisItem)
        options.yAxis.data = JSON.parse(JSON.stringify(yAxisData))
        myChart.setOption(options)
      }
    })

    // 注册 mouseout 事件,类目轴名称恢复默认颜色
    myChart.on('mouseout', params => {
      if (params.componentType === 'yAxis') {
        const yAxisName = params.value
        const index = yAxisData.findIndex(item => {
          return item === yAxisName || item.value === yAxisName
        })

        yAxisData.splice(index, 1, yAxisName)
        options.yAxis.data = JSON.parse(JSON.stringify(yAxisData))
        myChart.setOption(options)
      }
    })
  </script>
</body>
</html>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值