Fr3*_*dan 3 javascript chart.js
我有一个有多条线的图表,每条线都绘制在它自己的 y 轴上。
我一直在尝试设置它,以便当通过图例隐藏一条线时,它所在的轴也被隐藏。我的计划是在画布上添加一个点击侦听器,然后根据线状态禁用或启用所有轴。
我的问题是确定该行是否隐藏。dataset.hidden
只有当 中的隐藏值dataset._meta
未定义时,该属性才似乎相关。考虑到这一点,我尝试设置代码:
ctx.onclick = function(){
var changed = false;
for(var j = 0;j < scatterChart.options.scales.yAxes.length;j++){
var oldVal = scatterChart.options.scales.yAxes[j].display;
var hidden = false;
var isHiddenDataSet = scatterChart.data.datasets[j].hidden;
if(isHiddenDataSet){
hidden = true;
}
var isHiddenMeta = scatterChart.data.datasets[j]._meta[0].hidden;
if(isHiddenMeta != null){
hidden = isHiddenMeta;
}
scatterChart.options.scales.yAxes[j].display = !hidden;
changed = changed || oldVal == scatterChart.options.scales.yAxes[j].display;
}
if(changed){
scatterChart.update();
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码适用于我只有一个图表的原始测试,但如果页面上有多个图表,因为数据对象的索引在_meta
图表之间变化,则失败。
有没有办法确定数据集是否隐藏?
因为它对你有用,所以我将它设置为答案
_meta
数据集中的属性非常有用,尤其是在搜索特定属性(例如hidden
.
但是,当同一页面上有多个图表时,处理起来非常困难。
执行以下操作时:
var isHiddenMeta = scatterChart.data.datasets[j]._meta[0].hidden;
Run Code Online (Sandbox Code Playgroud)
该0
指数实际上是调用代码中的第一个图表(指数1
是第二个,等等。),
所以你得到的第一个图表的信息,而不是你刚刚点击的一个。
要解决此问题,您需要使用Object.keys()
与数据集信息相结合的方法,如下所示:
var isHiddenMeta = scatterChart.data.datasets[j]._meta[Object.keys(scatterChart.data.datasets[j]._meta)[0]].hidden;
Run Code Online (Sandbox Code Playgroud)
这将为您提供hidden
真实图表数据集的属性。
归档时间: |
|
查看次数: |
1104 次 |
最近记录: |