You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ApexCharts执行updateSeries时tooltip消失,寻求可行解决方案

解决ApexCharts updateSeries时Tooltip消失的变通方案

以下是两种经过实践验证的可行方案:

方案一:鼠标悬停时暂停数据更新

通过监听图表容器的鼠标出入事件,判断是否跳过本次更新,避免在用户查看Tooltip时打断体验:

// 标记鼠标是否在图表区域内
let isMouseOverChart = false;
const chartContainer = document.getElementById('your-chart-container');

// 绑定鼠标事件
chartContainer.addEventListener('mouseenter', () => isMouseOverChart = true);
chartContainer.addEventListener('mouseleave', () => isMouseOverChart = false);

// 定时更新逻辑
function updateChartData() {
  if (isMouseOverChart) {
    // 鼠标在图表上,延迟执行下一次更新
    setTimeout(updateChartData, 3000);
    return;
  }

  // AJAX获取新数据并更新
  fetch('/your-data-api')
    .then(res => res.json())
    .then(newData => {
      chart.updateSeries([{ data: newData }]);
      setTimeout(updateChartData, 3000);
    });
}

// 启动定时更新
updateChartData();

方案二:更新后强制恢复Tooltip

记录更新前Tooltip激活的数据点,在图表更新完成后手动触发Tooltip显示:

let activeTooltipInfo = null;
const chartOptions = {
  // 你的图表配置
  tooltip: {
    // 监听Tooltip显示事件,记录激活的点信息
    custom: function(ctx) {
      if (ctx.dataPointIndex !== undefined) {
        activeTooltipInfo = {
          seriesIndex: ctx.seriesIndex,
          dataPointIndex: ctx.dataPointIndex,
          // 记录当前鼠标位置,保证Tooltip位置准确
          pageX: event.pageX,
          pageY: event.pageY
        };
      }
      // 返回undefined,使用默认Tooltip渲染
      return undefined;
    }
  },
  events: {
    // 图表更新完成后触发
    updated: function(chartCtx) {
      if (activeTooltipInfo) {
        // 手动调用showTooltip恢复显示
        chartCtx.showTooltip({
          seriesIndex: activeTooltipInfo.seriesIndex,
          dataPointIndex: activeTooltipInfo.dataPointIndex,
          pageX: activeTooltipInfo.pageX,
          pageY: activeTooltipInfo.pageY
        });
      }
    }
  }
};

const chart = new ApexCharts(document.getElementById('your-chart'), chartOptions);
chart.render();

// 定时更新函数
function updateChartData() {
  fetch('/your-data-api')
    .then(res => res.json())
    .then(newData => {
      chart.updateSeries([{ data: newData }]);
      setTimeout(updateChartData, 3000);
    });
}

注意事项

  • 方案二中需要确保event对象在tooltip.custom回调中可访问,如果存在作用域问题,可以通过监听图表容器的mousemove事件单独记录鼠标坐标。
  • 如果你的图表是多系列,需要调整activeTooltipInfo的记录逻辑,适配多系列场景。

内容的提问来源于stack exchange,提问作者mikeardy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:10:15