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

HighCharts Stock图表无障碍适配咨询:键盘与VoiceOver支持问题

HighCharts Stock 无障碍访问适配问题解答

核心配置排查

首先确认是否开启了HighCharts核心的无障碍全局配置,初始化图表时可添加以下配置项:

Highcharts.chart('container', {
    accessibility: {
        enabled: true,
        keyboardNavigation: {
            enabled: true
        }
    },
    // 其他图表及stock-tools相关配置
});

需要注意的是,当前HighCharts核心的accessibility配置主要覆盖图表主体区域,对stock-tools的UI组件(工具栏、功能弹窗)的无障碍支持存在明显局限性,这也是你遇到问题的核心原因。

stock-tools模块无障碍缺陷的临时修复方案

目前官方暂未推出专门适配stock-tools的独立无障碍模块,你可以通过自定义DOM操作和事件绑定来临时解决问题:

  • 给工具栏列表添加tabindex与键盘导航:监听stock-tools渲染完成事件,手动补全无障碍属性并实现键盘切换逻辑
Highcharts.addEvent(Highcharts.StockTools, 'afterRender', function() {
    const toolBarList = document.querySelector('.highcharts-stocktools-toolbar ul');
    if (toolBarList) {
        toolBarList.setAttribute('tabindex', '0');
        toolBarList.addEventListener('keydown', function(e) {
            if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
                e.preventDefault();
                const items = this.querySelectorAll('li');
                let activeIndex = Array.from(items).findIndex(item => item === document.activeElement);
                activeIndex = e.key === 'ArrowDown' 
                    ? (activeIndex + 1) % items.length 
                    : activeIndex > 0 ? activeIndex - 1 : items.length - 1;
                items[activeIndex].focus();
            }
        });
    }
});
  • 修复列表项的语义化结构:将li内的非按钮元素替换为<button>标签,并补充aria-label属性
Highcharts.addEvent(Highcharts.StockTools.ToolbarItem, 'render', function() {
    const spanElement = this.element.querySelector('li > span');
    if (spanElement) {
        const btn = document.createElement('button');
        btn.innerHTML = spanElement.innerHTML;
        btn.setAttribute('aria-label', this.options.title);
        btn.setAttribute('type', 'button');
        spanElement.parentNode.replaceChild(btn, spanElement);
        btn.addEventListener('click', () => this.onClick());
    }
});
  • 实现弹窗的键盘访问支持:给弹窗添加焦点属性并绑定ESC关闭事件
Highcharts.addEvent(Highcharts.Popup, 'open', function() {
    const popup = this.container;
    popup.setAttribute('tabindex', '0');
    popup.focus();
    popup.addEventListener('keydown', (e) => {
        if (e.key === 'Escape') this.close();
    });
});

官方支持现状

目前HighCharts官方在逐步推进全模块的无障碍优化,但stock-tools模块的无障碍适配尚未完成正式迭代。你可以通过官方反馈渠道提交需求,推动该模块的无障碍功能完善。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:27:19