Highcharts 坐标轴标签点击事件

通过 API 上的例子 为轴标签添加链接 我们知道可以给坐标轴标签加上跳转链接,但是这种直接跳转往往无法满足需求,我们希望这个点击行为更可控(实现自己想要的交互)。由于目前 Highcharts 并没有提供对应事件配置项,所以这里简单说明一下如何自己实现坐标轴点击事件。

方法1:将跳转链接改为执行函数

关键代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let chart = Highcharts.chart('container', {
xAxis: {
labels: {
formatter: function() {
return '<a href="javascript: doSomething(\''+ this.value + '\')">'
+ this.value + '</a>';
}
}
}
});

function doSomething(category) {
// 当前点击的下标
let index = chart.xAxis[0].categoies.indexOf(category);
// 通过 index 和 category 我们就可以根据需求实现自己的想要的交互效果了
}

在线试一试

方法2:给坐标轴标签加事件

关键代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Highcharts.chart('container', {
// 配置
}, function(chart) { // 图表渲染完毕后的回调函数
let xAxis = chart.xAxis[0];

// 给坐标的 labelGroup 添加点击事件
Highcharts.addEvent(xAxis.labelGroup.element, 'click', function(e) {
// 将原生事件添加上 chartX 和 chartY 值
e = chart.pointer.normalize(e);
// 根据点击事件的位置计算出所在坐标轴的值
let index = Math.ceil(xAxis.toValue(e.chartX)), // 下标
category = xAxis.categories[index]; // 分类
});
});

在线试一试

简单说明:

  1. Highcharts.addEvent: Highcharts 封装的给 DOM 添加事件函数
  2. xAxis.labelGroup.element:坐标轴数据标签对应的 SVG DOM,可以通过 console.log(xAixs) 来查看
  3. pointer.normalize:原生事件对象扩展函数,给该对象加上 chartXchartY 属性
  4. xAxis.toValue:将像素值转换成坐标轴值,对应的反向函数是:toPixels
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×